突出显示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。

我希望它可以帮到你。

Interesting Posts