【问题标题】:Gestures not getting detected in accessibility mode在辅助功能模式下未检测到手势
【发布时间】:2026-02-08 15:35:01
【问题描述】:

我正在编写一个应用程序,我需要在屏幕顶部放置一个标签,并且每当用户触摸它(或在其上方滑动手指)时,我都需要大声读出标签文本。我尝试了以下方法:

首先使标签的可访问性元素 = YES

[labelInfo setIsAccessibilityElement:YES];

但这不起作用。 然后我尝试定义许多手势,例如两次触摸、单击;用一根和两根手指长按等,在那个手势类中我写UIAccessibilityPostNotification,这样就可以大声读出文本。但它似乎根本不起作用。我就是这样做的:

UITapGestureRecognizer *TapOnLabel = [[UITapGestureRecognizer alloc] initWithTarget:labelInfo action:@selector(TapOnLabel:)];
[TapOnLabel setIsAccessibilityElement:YES];
[TapOnLabel setNumberOfTapsRequired:2];
[TapOnLabel setNumberOfTouchesRequired:1];
[labelInfo addGestureRecognizer:TapOnLabel];
[TapOnLabel release];

-(void) TapOnLabel:(UITapGestureRecognizer *)gestureRecognizer
{
  UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, @"Where am    I?");
  NSLog(@"%@",labelInfo.text);
}

是否有我遗漏的东西或在辅助功能模式下没有手势工作,因为很多都是预定义的。例如。两指两按是音乐开/关等。 如果是这种情况,我至少需要滑动才能工作。对此有什么想法吗?

附:我已经看到了类似问题here 的解决方案。但是缩放手势很特别,对我没有帮助。此外,所有手势类都可以在没有辅助功能模式的情况下完美运行,因此它们已正确编写。

【问题讨论】:

  • 您不需要为此执行任何手势。标签是普通的 UILabel 吗?如果不是,它的accessibilityLabel 是什么?在启用了可访问性检查器的模拟器中(可以在设置中找到),检查器为该标签提供什么标签、提示、火车?
  • 只是为了咯咯笑......你的问题将如何实际使用?如果用户无法阅读屏幕(各种原因),那么他们如何知道要滑动的区域(部分单词,可能是不同的语言)?这个问题的用例是什么?
  • @pithhelmet 我猜你没有考虑过视力受损的人?他们会在这里大声说出标签,以便他们知道他们正在触摸正确的应用程序。

标签: ios5 accessibility uigesturerecognizer voiceover


【解决方案1】:

手势都被 VoiceOver 截取。有一种手势直通模式,您可以在屏幕上双击并按住手指 1 秒。然后,您将听到提示音,并且在您抬起手指或完成一个手势之前,拦截将被禁用。这基本上为您提供了 8 个手势,然后您可以完成 - 四次滑动和四次拖动。

话虽如此,为什么您的应用程序需要以这种方式运行?为什么您不能简单地添加辅助功能标签和/或提示,并允许 VoiceOver 焦点和触摸探索按设计工作?

【讨论】: