iOS 8 - 未正确应用UIAlertController按钮样式

时间:2015-03-24 03:27:58

标签: ios ios8 dialog uialertview uialertcontroller

我有一个带有2个UIAlertAction按钮的UIAlertController我已添加 - 一个标有" OK"另一个标有"取消"。我正在为它们使用UIAlertActionStyle.Default样式。但是,“取消”按钮似乎应用了.Cancel样式(强大的字体粗细),这不是我正在寻找的。我如何摆脱这种造型?

注意:我注意到如果我改变UIAlertAction按钮添加到UIAlertController的顺序 - "取消"首先添加按钮,然后是" OK"按钮 - 然后" OK"按钮获得强大的字体重量。

2 个答案:

答案 0 :(得分:3)

简而言之,iOS 8不允许您在提醒时没有粗体文​​本按钮。

iOS将以粗体显示默认选项。因为用户界面指南要求在右侧放置最常用的选项,并且添加了订单按钮确定它们在两个按钮警报上显示的顺序,所以添加的第二个选项是粗体。将UIAlertActionStyle设置为取消vs默认不会使用两个按钮产生明显的效果。

可以找到用户界面指南here。我引用的部分指出:

  

正确放置按钮。理想情况下,按钮是最自然的   要点击应符合两个标准:它应该执行该操作   用户最有可能想要的,它应该是最不可能的   如果用户无意中点击它会导致问题。具体来说:

     

当最可能的按钮执行非破坏性操作时,它   应该在两个按钮警报的右侧。取消按钮   这个动作应该在左边。

     

当最可能的按钮执行破坏性操作时,它应该   在两个按钮警报左侧。取消此按钮的按钮   行动应在右边。

答案 1 :(得分:0)

这是一个非常晚的答案,但我发布了这个,以防将来有人觉得它很方便。

似乎即使在iOS 9.3中,Destructive按钮也有一些内部优先于Cancel按钮。因此,对于具有一个Destructive和一个Cancel按钮的UIAlertController,Destructive按钮始终显示在右侧。

为了解决这个问题,我将取消按钮样式更改为UIAlertActionStyleDefault,并将其preferredAction设置为按钮1(默认按钮),使其看起来像原始取消按钮。

代码是这样的:

UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Alert" message:@"Are you sure that you want to delete selected picture(s)?" preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"Yes" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
    //delete
    [alert dismissViewControllerAnimated:YES completion:NULL];
}]];
[alert addAction:[UIAlertAction actionWithTitle:@"No" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
    [alert dismissViewControllerAnimated:YES completion:NULL];
}]];
alert.preferredAction = alert.actions[1];
[self presentViewController:alert animated:YES completion:NULL];

不知何故,它如预期的那样有效!

PS:代码在Objective C中,但我可以很容易地转换为Swift。