Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS 8-未正确应用UIAlertController按钮样式_Ios_Ios8_Dialog_Uialertview_Uialertcontroller - Fatal编程技术网

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

iOS 8-未正确应用UIAlertController按钮样式,ios,ios8,dialog,uialertview,uialertcontroller,Ios,Ios8,Dialog,Uialertview,Uialertcontroller,我有一个UIAlertController,它有两个UIAlertAction按钮,一个标记为“OK”,另一个标记为“Cancel”。我正在使用UIAlertActionStyle。它们的默认样式。但是,“取消”按钮似乎应用了.Cancel样式(强字体权重),这不是我想要的。我该如何摆脱那种风格 注意:我注意到,如果我更改UIAlertAction按钮添加到UIAlertController的顺序--“取消”按钮先添加,然后是“确定”按钮--那么“确定”按钮将获得强字体权重 简而言之,iOS 8

我有一个UIAlertController,它有两个UIAlertAction按钮,一个标记为“OK”,另一个标记为“Cancel”。我正在使用UIAlertActionStyle。它们的默认样式。但是,“取消”按钮似乎应用了.Cancel样式(强字体权重),这不是我想要的。我该如何摆脱那种风格


注意:我注意到,如果我更改UIAlertAction按钮添加到UIAlertController的顺序--“取消”按钮先添加,然后是“确定”按钮--那么“确定”按钮将获得强字体权重

简而言之,iOS 8不允许您在警报上没有粗体文本按钮

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

可以找到用户界面指南。第一部分提到:

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

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

当最有可能的按钮执行破坏性操作时,它应该 在两个按钮的警报中位于左侧。取消此操作的按钮 行动应该是正确的


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

即使在iOS 9.3中,破坏性按钮也比取消按钮有一些内部优先级。因此,对于带有一个破坏性按钮和一个取消按钮的
UIAlertController
,破坏性按钮始终显示在右侧

为了克服这个问题,我将取消按钮样式更改为
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。

目前我的警报上有两个按钮,一个是带有样式销毁的“删除”,另一个是带有样式取消的“取消”。我的理解和你的一样,破坏性行为总是发生在左边。然而,无论我添加这两个按钮的顺序如何,“删除”总是显示在右侧,样式为红色。“取消”始终显示在左侧,自动设置为蓝色和粗体。怎么回事!?