2012-03-26 20 views
4

我正在创建基于视图的应用程序,我将通过addSubview方法进入下一个视图。 问题是,当我打开VoiceOver ON功能并添加子视图时,它会从先前视图获取配件标签。也就是说,如果我在rect上点击视图,在之前的视图中有标签,那么VoiceOver也会将其检测为辅助功能标签并开始读取该标签。 但是,如果我使用导航控制器去下一个视图控制器,我不会有任何问题。 任何人都可以告诉我,如果苹果本身支持VoiceOver设施仅适用于基于导航的应用程序,或者在基于视图的应用程序中有VoiceOver的其他解决方案?VoiceOver读取iPhone应用程序中以前视图上的标签?错误?

PS我也尝试了一些演示应用程序也一样,但结果相同。

因此,在当前视图中,我添加了一个包含按钮的子视图,而辅助功能也读取了子视图后面的标签。我希望阅读添加视图的按钮的可访问性,以及前一视图的可视部分的剩余部分(而不是隐藏在添加视图后面的标签)。 有人可以告诉,如果它是iPhone的配音错误,默认情况下,它也读取parentView的标签,在addsubview?

+0

是你隐藏的标签放置在您的视图中选中了隐藏的复选框,或者你输入他们的厦门国际银行或情节串连图板,他们只是被存储在边栏上? – 2012-03-27 00:33:37

+0

我的标签隐藏在添加的视图后面。我刚才在我的问题中详细阐述了它。 我在当前视图中添加子视图,其中包含按钮,这个子视图背后有一些标签,配音也读取这些标签,这不应该发生。 – vipsk 2012-03-27 09:51:52

+0

你在使用故事板吗? – 2012-03-27 11:09:37

回答

1

使用该屏幕改变通知

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, nil); 

,如果你需要聚焦于特定的对象/视图,然后通过这些无偿的地方。

+0

我们需要添加这条线吗? – Sandy 2018-02-02 13:53:22

+0

viewWillAppear()将工作 – 2018-02-05 06:00:25

+0

只有确切的相同的行或我们需要改变一些东西? – Sandy 2018-02-05 06:05:04

6

如果一个视图位于视图层次结构中,即使它被另一视图遮挡,VoiceOver也会检测到该视图。

您不应该通过在前一个视图的顶部添加新视图来移动到另一个内容屏幕。你的应用程序的每个屏幕应该是UIViewController,而不仅仅是一个普通的UIView。这给你很多好处,其中之一就是视图控制器可以在屏幕关闭时自动卸载其视图,并且存在内存警告。

要管理应用程序中屏幕之间的转换,应该使用容器控制器(如导航控制器(或您自己的定制控件))。如果你喜欢,你可以禁用导航栏和过渡效果,并用它来管理你的视图堆栈。将新的视图控制器推入堆栈时,前一个将被移除,并且问题消失。

因此,您应该认真重新考虑您管理屏幕和视图的方式。在某种容器内部是要走的路。至少,当你向屏幕添加一个新视图时,你应该删除旧视图。

+0

https://stackoverflow.com/questions/48587155/voiceover-access-previous-screen-element任何想法? – Sandy 2018-02-02 17:23:14

2

我和你有同样的问题,我花了一些时间来解决这个问题。 当您将视图B添加到视图A上时,您不会隐藏视图A.该视图将继续存在,并且与VoiceOver预期的一样,它将读取该视图/标签。

您可以使用Xcode为您提供的调试视图来查看此类问题。我写了一个例子来让你知道VoiceOver如何看你的标签。

当您使用addSubview,你的看法层次是这样的:

overview

因此,在这种情况下,容器视图,您好堆栈!标签在Hello World标签上。作为用户,您看不到标签Hello World。但是voiceOver可以看到该视图。

好了,现在问题已经知道了,解决方案是:只要你想添加一个视图到另一个视图,首先隐藏前一个视图。然后使用xcode的Debug View来查看你的视图是如何的。

我解决这个问题向您展示如何纠正我演示了错误:

代码: enter image description here

调试视图:

  • 第一个标签:postimg.org/image/cabhadzrl/
  • 第二个标签:postimg.org/image/nsldgjb41/5605fbcd/

如果你是观察者,我已经在标签之间添加了一个视图容器,但这个视图只是为了改善层次结构的视野。

2

您可以将视图的accessibilityViewIsModal属性设置为YES。

@property(nonatomic)BOOL accessibilityViewIsModal NS_AVAILABLE_IOS(5_0);

通知接收视图是否应该被可访问性视为模态。如果是,则该视图外的 元素将被忽略。只有这个视图中的元素才会被暴露。 默认==编号为

因此,无论您要添加哪个视图,请将accessibilityViewIsModal设置为YES/true。

view.accessibilityViewIsModal = YES

相关问题