首页 文章

使程序化的iOS UIView完全可访问

提问于
浏览
4

我正在以编程方式为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];

最后我添加 UIButtonUILabelUIButtonBarItem . 我最后添加它们,因此它们位于视图层次结构的顶部 . 我为它们添加了可访问性标签和特征 . 这是 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];

我的确叫了 UIAccessibilityPostNotificationUIAccessibilityScreenChangedNotification ,无);当我把这个视图推到堆栈上时 .

使用画外音时,当显示视图时,我可以滑动并给出我的每个元素( UIButtonBarItemUILabelUIButton )焦点,我可以通过双击激活它们 . 但是,VoiceOver不会提供有关元素的信息 . 使用辅助功能检查器在模拟器中进行测试,显示我通过aControl.accessibilityLabel = @ "the label"设置的标签 .

此视图用于录制音频 . 如果我激活按钮并录制音频并停止录音,VoiceOver现在会在我对焦时说出元素的标签?为什么VoiceOver在视图首次加载时不会说出信息?任何线索都赞赏!

我正在使用iOS 4.3.3在iPad 2上进行测试 .

2 回答

  • 2

    如果您希望自己的观点无法访问,请使用:

    [microphoneView setUserInteractionEnabled:NO];
    
  • 1

    此视图用于录音 . 问题是我在viewDidLoad方法中将AVSession类别设置为AVAudioSessionCategoryRecord . 这导致VoiceOver不说出视图信息 . 我修改了代码,只有在按下记录按钮时才将类别设置为AVAudioSessionCategoryRecord . 录制完成后,我将其设置为AVAudioSessionCategoryPlayAndRecord . 以下是完全解释它的主题:http://lists.apple.com/archives/accessibility-dev/2011/Jul/msg00002.html

相关问题