iOS UIAlertController粗体按钮在8.3中更改

UIAlertController,带有两个设置了样式的按钮:

UIAlertActionStyle.Cancel
UIAlertActionStyle.Default

在iOS 8.2中,“取消”按钮为非粗体,而“默认”为粗体。在iOS 8.3中,它们已经切换了

您可以看到它是Apple自己的应用程序,例如,设置>邮件>添加帐户> iCloud>输入无效数据,然后在8.3上显示如下:

不支援的Apple ID

了解更多(粗体)可以(非粗体)

而对于8.2则相反。

任何变通办法使其再次类似于8.2。 为什么改变了?

Bbx asked 2020-01-24T12:43:33Z
4个解决方案
101 votes

在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) {}

右侧的“确定”按钮将以粗体显示。

Thi answered 2020-01-24T12:43:57Z
14 votes

这是对SDK的有意更改。 我刚刚收到苹果公司对此问题的回应,并指出:

这是有意更改-取消按钮在警报中以粗体显示。

不幸的是,我在各种变更日志中都找不到任何提及此的内容。

因此,我们需要在某些地方对我们的应用程序进行更改,以使某些事情变得有意义。

Josh Heald answered 2020-01-24T12:44:31Z
2 votes

我刚刚在iOS 8.2中进行了检查:第一个添加的按钮为非粗体,第二个添加的按钮为粗体。 使用此代码,取消按钮将变为粗体:

[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,但这可能是原因。

Vlad answered 2020-01-24T12:45:00Z
2 votes

从iOS 9开始,UIAlertController具有名为UIAlertController的属性。UIAlertAction具有以下声明:

var preferredAction: UIAlertAction? { get set }

用户从警报中采取的首选操作。 [...]首选操作仅与UIAlertController样式相关; 操作表未使用它。 当您指定首选操作时,警报控制器会突出显示该操作的文本以使其重点突出。 (如果警报还包含取消按钮,则首选操作将收到突出显示的信息,而不是取消按钮。)[...]此属性的默认值为UIAlertAction


下面的Swift 5 / iOS 12示例代码显示了如何显示UIAlertController,该代码将使用preferredAction突出显示指定的UIAlertAction的文本:

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)
Imanou Petit answered 2020-01-24T12:45:30Z
translate from https://stackoverflow.com:/questions/29590534/ios-uialertcontroller-bold-button-changed-in-8-3