web-dev-qa-db-ja.com

8.3で変更されたiOS UIAlertControllerの太字ボタン

スタイルが設定された2つのボタンを持つUIAlertController:

UIAlertActionStyle.Cancel
UIAlertActionStyle.Default

iOS 8.2では、キャンセルボタンは太字ではなく、デフォルトは太字です。 iOS 8.3では、彼らはラウンドを切り替えました

Apple独自のアプリ(たとえば、[設定]> [メール]> [アカウントを追加]> [iCloud]>無効なデータを入力する)を確認できます。8.3では、次のように表示されます。

サポートされていないApple ID

詳細(太字)OK(太字以外)

一方、8.2では逆でした。

再度8.2のようにするための回避策。なぜ変わったのですか?

49
Bbx

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]ボタンは太字で表示されます。

99
Thi

これは、SDKに対する意図的な変更です。この問題について、Appleから このレーダー への応答がありました。

これは意図的な変更です。アラートではキャンセルボタンを太字にします。

残念ながら、これについて言及しているさまざまな変更ログには何も見つかりません。

そのため、いくつかのことを理解できるように、アプリを変更する必要があります。

14
Josh Heald

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ではチェックインできませんが、この動作が原因である可能性があります。

2
Vlad

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)
2
Imanou Petit