启用VoiceOver后,按需提供UIButton语音帮助

时间:2015-09-01 14:21:30

标签: ios objective-c uibutton voiceover uiaccessibility

我想问一下如何在启用VoiceOver的情况下按需设计语音辅助。

我有这样的代码来创建UIButton:

_myLocationButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[_myLocationButton setImage:[UIImage imageNamed:@"my_location_icon"] forState:UIControlStateNormal];
_myLocationButton.accessibilityLabel = @"My location";
_myLocationButton.accessibilityHint = @"Double tap to hear where You are, in which zone or near zone and floor information in building";
[_myLocationButton addTarget:self
                      action:@selector(myLocationButtonPressed)
            forControlEvents:UIControlEventTouchUpInside];

现在在myLocationButtonPressed方法中我有这样的代码:

UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, positionDescription);

我的问题是。当我在myLocationButton处于活动状态时尝试双击时,VoiceOver只会说:“我的位置”。我想要的是双击后我想听到positionDescription而不是按钮accessibilityLabel。我知道myLocationButtonPressed方法正在调用,但是由于未知原因发布UIAccessibilityAnnouncementNotification事件什么都不做,我听不到任何声音。

有人可以就如何处理这类问题给我一些建议。

1 个答案:

答案 0 :(得分:1)

我发现只能一致地宣读通知的唯一方法是延迟发布通知。这个功能应该有所帮助。

- (void)postVoiceOverAnnouncement:(NSString*)message withDelay:(int)seconds {
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(seconds * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, @"This will get read out");
    });
}

即使添加了开始媒体会话特征,某些内容仍然会中断通知。您需要注意的是延迟时间。如果有人继续浏览您的应用,他们可能会中断通知。但是,由于在适当的应用程序中,这些信息应该可以在其他地方获得,他们应该能够再次找到它。这当然只是一个有用的宣布,以免将焦点转移到毫无戒心的VoiceOver用户身上:)。

我注意到您的代码的另一个问题:

_myLocationButton.accessibilityHint = @"Double tap to hear where You are, in which zone or near zone and floor information in building";

首先,勇敢地包含这样详细的提示!但是,您不应该将" Double tap添加到...."一部分。用户知道如何通过VoiceOver与按钮进行交互。这是与此互动的唯一方式吗?或者也可以在外接键盘上输入?那些选择手势是其他一些互动的其他假设的AT怎么样...对于使用盲文板的人来说这个暗示有多大用处?只需告知用户与对象交互的后果,让AT处理剩下的事情。