【问题标题】:Highlight Top Button in UIAlertView突出显示 UIAlertView 中的顶部按钮
【发布时间】:2013-10-08 03:32:58
【问题描述】:

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

【问题讨论】:

    标签: iphone ios uialertview


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 请注意,更改警报视图层次结构始终被声明为私有,因此被禁止。因此在 AppStore 审核过程中可能会导致拒绝。
    • 您关于 HCI 的观点很有道理,我认为这就是为什么 Apple 不允许您进行任何更改。然而,在我看来,我被顶部按钮所吸引,这就是我试图改变它的原因。谢谢你的解释。
    【解决方案2】:

    有一个客户提醒视图DTAlertView.

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-27
      • 2013-03-26
      • 2016-07-27
      • 2019-04-27
      • 1970-01-01
      相关资源
      最近更新 更多