Blog スタッフブログ
[iOS/Mac]謎のプロパティ、UIAlertControllerSeverityの正体
こんにちは、株式会社MIXシステム開発担当のBloomです。
今回はiOS16から追加されているUIAlertControllerのプロパティ、UIAlertController型のseverityプロパティについて調べてみようと思います。
さて、このUIAlertControllerSeverityは列挙型であり、次の列挙子が定義されています。
@available(iOS 16.0, *)
public enum UIAlertControllerSeverity : Int, @unchecked Sendable {
case `default` = 0
case critical = 1
}
ドキュメントによるとそのままdefaultは標準のアラートスタイル、criticalは重要な・警告としてのアラートスタイルになるようです。早速実行してみましょう!
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if #available(iOS 16.0, *) {
let alert = UIAlertController(title: "タイトル", message: "severity: default", preferredStyle: .alert)
alert.severity = .default
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { action in
print("OK")
}))
alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: { action in
print("Cancel")
}))
alert.addAction(UIAlertAction(title: "Destructive", style: .destructive, handler: { action in
print("Destructive")
}))
self.present(alert, animated: true)
}
}
実行結果
なんということでしょう、何も変わりがありません。ChatGPTに少し聞いてみましょう。
どうやら存在しないプロパティを操作していたようです。良かったですね。
Mac Catalystについて
さて、真面目に調査しましょう。まず公式ドキュメントにはこの通りの記載があります。
This enumeration defines the severity options used by the
severity
property ofUIAlertController
. In apps built with Mac Catalyst, the severity determines the style of the presented alert. AUIAlertControllerSeverity.critical
alert appears with a caution icon, and an alert with aUIAlertControllerSeverity.default
severity doesn’t. UIKit ignores the alert severity on iOS.You should only use the
UIAlertControllerSeverity.critical
severity if an alert truly requires special attention from the user. For more information, see the Human Interface Guidelines on alerts.
そう、このプロパティは2019年末に発表された、iPadのソースでMacアプリを構築するための仕組みであるMac CatalystでビルドしたMacアプリにおいてのみ表示制御の動作をするようです。早速Mac Catalystを利用してみましょう!
Xcode15系でMac Catalystを利用する場合、[General] -> [Supported Destinations]で[Mac Catalyst]を選択して追加する必要があります。
追加が完了したらRun DestinationをMy Macなどに指定し早速ビルドしてみましょう。
実行結果
しっかり見た目でわかる変化が現れました。NSAlertにおけるalertStyleの指定と同じ効果があるようですね。
これでいつの間にか追加されていた謎のプロパティ、UIAlertControllerSeverityの正体を捉えることができました。良かったですね。