繁体   English   中英

突出显示UIAlertView中的顶部按钮

[英]Highlight Top Button in UIAlertView

我有一个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;

此问题实际上是由Apple在iOS 7中所做的更改引起的。在iOS 7之前,我们可以通过调用[alertView subviews]来访问UIAlertView[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提供相同的设计。 原因在于人机交互研究(人机交互)。 如果这是在所有应用程序中实现的方式,人们倾向于认为底部按钮始终是“默认”答案。
底部按钮也是UIAlertView 唯一突出显示的按钮。 因此,它的视觉重量比按钮的视觉重量更强,文本数量大致相同。 这是人们倾向于选择这一个的另一个因素。 这也是为什么突出显示的按钮永远不应该导致灾难性和不可逆转的行为('你想删除所有已保存的游戏'应该始终突出显示按钮'保存我保存的游戏'而不是那个告诉'删除所有内容')的原因。
因此,无论您添加按钮的顺序如何,Apple总是将“ Cancel Button为底部按钮。 因此,如果您的应用程序没有使用完全自定义界面并使用Apple提供的许多用户界面元素,我强烈建议您不要尝试更改该行为并将底部按钮设置为“默认”按钮。

有一个客户警报视图DTAlertView。

我希望它可以帮到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM