如何将`accessibilityLabel`添加到`UIAlertView`按钮?

时间:2014-01-30 13:10:51

标签: ios objective-c accessibility uialertview

如何将accessibilityLabel添加到UIAlertView按钮?

UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"Announcement" 
                                                message: @"message!"
                                               delegate: nil    
                                      cancelButtonTitle: @"cancelButton"  
                                      otherButtonTitles: @"otherButton"]; 

[alert show];

3 个答案:

答案 0 :(得分:7)

根据Apple's documentation(搜索“使警报视图可访问”),AlertViews“默认可访问”。这个以及按钮不可编辑的事实意味着您可能不应该尝试自己更改accessibilityLabel。默认情况下,他们使用按钮的标题和单词“按钮”,这应该没问题。

  

警报视图的辅助功能属于警报标题,警报消息和按钮标题。如果VoiceOver被激活,当显示警报时它会说出“警告”一词,然后说出其标题,然后是设置的消息。当用户点击按钮时,VoiceOver会说出其标题和单词“按钮”。当用户点击文本字段时,VoiceOver会说出其值和“文本字段”或“安全文本字段”。

答案 1 :(得分:1)

唯一可以做到这一点的方法是在UIAlertView子视图中找到UIButtons:

for (id button in self.alertView.subviews){
    if ([button isKindOfClass:[UIButton class]]){
        ((UIButton *)button).accessibilityLabel = @"your custom text";
    }
}

但是这是唯一的方法,因为没有公共API来访问这些UIButton,这是因为Apple不希望您访问它们。访问UIAlertView的内部视图class是Apple不允许的,可能会在App Store审核过程中拒绝您的应用。

如果您确实需要具有自定义accessibilityLabel的UIButtons,您应该考虑设计自定义警报视图而不是使用Apple UIAlertView类。

答案 2 :(得分:0)

迟到了,但也许对某人有用。

您可以使用索引访问警报按钮。例如,您可以在屏幕中找到第二个按钮,如下面的Objective C:

- (void)getAlertActionButton:(XCUIApplication *)app {
    // any code 
    XCUIElement *secondAlertButton = [[[app.alerts otherElements] buttons] elementBoundByIndex:1];
    // any code    
}

要查找警报窗口层次结构,请使用调试模式。