我正在以编程方式为iOS构建 UINavigationContoller
,并且在使其完全可访问时遇到问题 . 在 loadView
中我创建了主 UIView
并将其设置为无法访问:
- (void)loadView
{
CGRect viewRect = [[UIScreen mainScreen] applicationFrame];
UIView *tmp = [[UIView alloc] initWithFrame:viewRect];
[tmp setIsAccessibilityElement:NO];
然后我添加了仅包含背景图像的附加 UIViews
,并将其设置为不可访问 . 所有视图和控件都添加到上面创建的"tmp" UIView
上 . 这是一个"background"视图示例:
UIImage* microphone = [UIImage imageNamed:@"microphone.jpg"];
UIView* microphoneView = [[[UIView alloc] initWithFrame: CGRectMake(0,0,viewRect.size.width, microphone.size.height)] autorelease];
[microphoneView setBackgroundColor:[UIColor colorWithPatternImage:microphone]];
[microphoneView setIsAccessibilityElement:NO];
[tmp addSubview:microphoneView];
最后我添加 UIButton
, UILabel
和 UIButtonBarItem
. 我最后添加它们,因此它们位于视图层次结构的顶部 . 我为它们添加了可访问性标签和特征 . 这是 UIButton
:
self.recordImage = [UIImage imageNamed: @"record_button.png"];
self.stopRecordImage = [UIImage imageNamed: @"stop_button.png"];
self.recordButton.accessibilityTraits |= UIAccessibilityTraitStartsMediaSession;
self.recordButton = [[UIButton alloc ] initWithFrame: CGRectMake((viewRect.size.width - recordImage.size.width)/2 , (microphone.size.height + (grayBkg.size.height - recordImage.size.height)/2), recordImage.size.width, recordImage.size.height)];
[self.recordButton setIsAccessibilityElement:YES];
[self.recordButton setAccessibilityLabel: @"toggle recording start"];
[self.recordButton setImage: recordImage forState:UIControlStateNormal];
[self.recordButton addTarget: self action:@selector(processButton:) forControlEvents:UIControlEventTouchUpInside];
[tmp addSubview:recordButton];
最后
....
[self setView:tmp];
[tmp release];
我的确叫了 UIAccessibilityPostNotification
( UIAccessibilityScreenChangedNotification
,无);当我把这个视图推到堆栈上时 .
使用画外音时,当显示视图时,我可以滑动并给出我的每个元素( UIButtonBarItem
, UILabel
和 UIButton
)焦点,我可以通过双击激活它们 . 但是,VoiceOver不会提供有关元素的信息 . 使用辅助功能检查器在模拟器中进行测试,显示我通过aControl.accessibilityLabel = @ "the label"设置的标签 .
此视图用于录制音频 . 如果我激活按钮并录制音频并停止录音,VoiceOver现在会在我对焦时说出元素的标签?为什么VoiceOver在视图首次加载时不会说出信息?任何线索都赞赏!
我正在使用iOS 4.3.3在iPad 2上进行测试 .
2 回答
如果您希望自己的观点无法访问,请使用:
此视图用于录音 . 问题是我在viewDidLoad方法中将AVSession类别设置为AVAudioSessionCategoryRecord . 这导致VoiceOver不说出视图信息 . 我修改了代码,只有在按下记录按钮时才将类别设置为AVAudioSessionCategoryRecord . 录制完成后,我将其设置为AVAudioSessionCategoryPlayAndRecord . 以下是完全解释它的主题:http://lists.apple.com/archives/accessibility-dev/2011/Jul/msg00002.html