我有一个带有2个UIAlertAction按钮的UIAlertController我已添加 - 一个标有" OK"另一个标有"取消"。我正在为它们使用UIAlertActionStyle.Default样式。但是,“取消”按钮似乎应用了.Cancel样式(强大的字体粗细),这不是我正在寻找的。我如何摆脱这种造型?
注意:我注意到如果我改变UIAlertAction按钮添加到UIAlertController的顺序 - "取消"首先添加按钮,然后是" OK"按钮 - 然后" OK"按钮获得强大的字体重量。
答案 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。