7

我有一个 UIAlertView,默认情况下在 UIAlertView 中垂直显示 3 个按钮。我希望顶部按钮加粗/突出显示。根据我的理解和测试,“取消”按钮是突出显示的。问题是无论我如何设置取消按钮,它都放在这一行的最后。我不能让它成为第一个按钮。

我试过明确设置取消按钮

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title
                                                message:message
                                               delegate:self
                                      cancelButtonTitle:@"Top Button"
                                      otherButtonTitles:@"Middle Button", @"Bottom Button", nil];

以及设置取消按钮的索引

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title
                                                       message:message
                                                      delegate:self
                                             cancelButtonTitle:nil
                                             otherButtonTitles:@"Top Button", @"Middle Button", @"Bottom Button", nil];
alert.cancelButtonIndex = 0;
4

2 回答 2

8

这个问题实际上是由 Apple 在 iOS 7 中所做的更改引起的。在 iOS 7 之前,我们可以UIAlertView通过调用来访问 an 的子视图[alertView subviews]。但是由于 iOS 7 不允许我们访问任何子视图([alertView subviews].count将始终返回零),我们无法像以前那样自定义 UIAlertViews。

因此,在 iOS 7 下实现目标的唯一方法是构建一个看起来像的自定义视图,UIAlertView然后根据需要对其进行自定义。

但是,如果您正在为 iOS 7 之前的 iOS 版本进行编码,那么您可以使用这个简单的技巧来访问按钮:

UIAlertView *alertView = [[UIAlertView alloc] init];
[alertView addButtonWithTitle:@"Yes"];
UIButton *yesButton = [alertView.subviews lastObject]; //is nil under iOS 7

这样您就可以访问第一个按钮。之后,您可以UIAlertView像往常一样自定义您的。

顺便说一句:Apple 不仅想UIAlertView通过改变我们定制它们的方式来赋予所有的设计相同的设计。原因在于 HCI 研究(人机交互)。如果这是在所有应用程序中实现的方式,人们倾向于认为底部按钮始终是“默认”答案。
此外,底部按钮是 中唯一突出显示的按钮UIAlertView。所以它的视觉权重要强于具有大约相同文本量的按钮的视觉权重。这是人们倾向于选择这个的另一个因素。这也是为什么突出显示的按钮永远不应该导致灾难性和不可逆转的行为的原因(“你想删除所有保存的游戏”应该始终突出显示“保留我保存的游戏”按钮,而不是那个告诉“
Cancel Button因此,无论您添加按钮的顺序如何, Apple 总是将其放在底部。因此,如果您的应用程序没有使用完全自定义的界面并使用 Apple 提供的许多用户界面元素,那么我强烈建议您不要尝试更改该行为并将底部按钮设为“默认”按钮。

于 2013-10-01T21:02:30.167 回答
0

有一个客户警报视图DTAlertView。

我希望它可以帮助你。

于 2014-04-01T06:16:12.477 回答