Как добавить "accessibilityLabel" в кнопки "UIAlertView"?

как добавить accessibilityLabel to UIAlertView кнопки?

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

[alert show];

3 ответов


единственный способ сделать это-найти UIButtons в подвидах UIAlertView:

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

однако это единственный способ сделать это, потому что нет публичного API для доступа к этим UIButtons, и это потому, что Apple не хочет, чтобы вы имели к ним доступ. доступ к внутренним представлениям класса UIAlertView-это то, что Apple не разрешает, и вполне вероятно, что ваше приложение будет отклонено во время процесса обзора App Store.

Если вы действительно нужно иметь UIButtons с пользовательской accessibilityLabel вы должны изучить разработку пользовательского представления предупреждения вместо использования класса Apple UIAlertView.


по данным документация Apple (поиск "создание доступных представлений предупреждений"), AlertViews "доступны по умолчанию". Это, а также тот факт, что кнопки не редактируются, означает, что вы, вероятно, не должны пытаться изменить accessibilityLabels себя. По умолчанию они используют название кнопки и слово "кнопка", что должно быть хорошо.

доступность для представлений оповещений относится к заголовку оповещения, сообщению оповещения и заголовкам кнопок. Если VoiceOver активированный, он говорит слово "alert", когда отображается предупреждение, а затем говорит его название, а затем его сообщение, если установлено. Когда пользователь нажимает кнопку, VoiceOver произносит ее название и слово "кнопка"."Когда пользователь нажимает текстовое поле, VoiceOver говорит его значение и "текстовое поле" или " безопасное текстовое поле."


поздно, но, возможно, полезно для кого-то.

вы можете получить доступ к кнопки оповещения, используя их индекс. Например, вы можете найти вторую кнопку на экране следующим образом в Objective C:

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

чтобы найти иерархию окон оповещений, используйте режим отладки.