スタイルが設定された2つのボタンを持つUIAlertController:
UIAlertActionStyle.Cancel
UIAlertActionStyle.Default
iOS 8.2では、キャンセルボタンは太字ではなく、デフォルトは太字です。 iOS 8.3では、彼らはラウンドを切り替えました
Apple独自のアプリ(たとえば、[設定]> [メール]> [アカウントを追加]> [iCloud]>無効なデータを入力する)を確認できます。8.3では、次のように表示されます。
サポートされていないApple ID
詳細(太字)OK(太字以外)
一方、8.2では逆でした。
再度8.2のようにするための回避策。なぜ変わったのですか?
IOS 9から、ボタンのタイトルを太字にするアクションにpreferredAction
値を設定できます。
let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)
let OKAction = UIAlertAction(title: "OK", style: .Default, handler: nil)
alert.addAction(cancelAction)
alert.addAction(OKAction)
alert.preferredAction = OKAction
presentViewController(alert, animated: true) {}
右側の[OK]ボタンは太字で表示されます。
これは、SDKに対する意図的な変更です。この問題について、Appleから このレーダー への応答がありました。
これは意図的な変更です。アラートではキャンセルボタンを太字にします。
残念ながら、これについて言及しているさまざまな変更ログには何も見つかりません。
そのため、いくつかのことを理解できるように、アプリを変更する必要があります。
IOS 8.2でチェックしたところです。first追加ボタンは太字ではなく、second追加ボタンは太字です。このコードでは、キャンセルボタンは太字になります。
[alertController addAction:[UIAlertAction actionWithTitle:@"Ok"
style:UIAlertActionStyleDefault
handler:nil]];
[alertController addAction:[UIAlertAction actionWithTitle:@"Cancel"
style:UIAlertActionStyleCancel
handler:nil]];
このコードでは、デフォルトのボタンは太字になります。
[alertController addAction:[UIAlertAction actionWithTitle:@"Cancel"
style:UIAlertActionStyleCancel
handler:nil]];
[alertController addAction:[UIAlertAction actionWithTitle:@"Ok"
style:UIAlertActionStyleDefault
handler:nil]];
IOS 8.3ではチェックインできませんが、この動作が原因である可能性があります。
IOS 9以降、UIAlertController
には preferredAction
というプロパティがあります。 preferredAction
には次の宣言があります。
var preferredAction: UIAlertAction? { get set }
ユーザーがアラートから実行する優先アクション。 [...]優先アクションは
UIAlertController.Style.alert
スタイルのみ。アクションシートでは使用されません。優先アクションを指定すると、アラートコントローラーはそのアクションのテキストを強調表示して強調します。 (アラートにキャンセルボタンも含まれている場合、優先アクションはキャンセルボタンの代わりに強調表示を受け取ります。)[...]このプロパティのデフォルト値はnil
です。
以下のSwift 5/iOS 12サンプルコードは、UIAlertController
を使用して、指定されたUIAlertAction
のテキストを強調表示するpreferredAction
を表示する方法を示します:
let alertController = UIAlertController(title: "Title", message: "Message", preferredStyle: .alert)
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
let okAction = UIAlertAction(title: "OK", style: .default, handler: { action in
print("Hello")
})
alertController.addAction(cancelAction)
alertController.addAction(okAction)
alertController.preferredAction = okAction
present(alertController, animated: true, completion: nil)