我打算在UIAccessibilityLayoutChangedNotification的button元素上使用UIAlertView设置可访问性焦点(可点击焦点)。为了保留对按钮的引用,因此在下面的代码中将其实现:

UIAlertView *alert = [[[UIAlertView alloc] init] autorelease];
alert.delegate = self;
[alert setTitle:@"Title"];
[alert setMessage:@"Message"];

[alert addButtonWithTitle:@"Button"];
UIButton *yesButton = [alert.subviews lastObject];
[yesButton setHidden:NO];

myButton = [[UIButton buttonWithType:UIButtonTypeCustom] autorelease];
[myButton retain];
[alert addSubview:myButton];
[alert show];

[myButton setAccessibilityLabel:@"This is my button"];
[myButton setFrame:yesButton.frame];

[alert show];

如果VoiceOver正在运行,我希望可点击的焦点位于按钮上,而不是标题元素上。所以当显示警报视图时,我这样做:
if(UIAccessibilityIsVoiceOverRunning()){
    UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, myButton);
}

但是,VoiceOver会读取按钮的可访问性标签(“这是我的按钮”),但是可点击的焦点不会设置在按钮上,而是保留在UIAlertView的标题元素上

最佳答案

您确定要与VoiceOver对抗吗?用户之所以能够快速导航,部分原因是VoiceOver遍历用户界面的一致性。尽量不要通过更改默认值来妨碍他们。

就是说,您可以通过在警报视图出现后发布布局更改通知来覆盖默认的VoiceOver焦点。尝试从UIAlertViewDelegate-didPresentAlertView:中这样做。您可能还需要等待一小段时间,然后再发布通知,以确保视图已完成显示并且VoiceOver已经注意到。 dispatch_async()非常适合此目的。

关于ios - 在VoiceOver期间将可点击的焦点设置在UIAlertView的按钮元素上-UIAccessibility,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27719912/

10-14 21:28