我正在自定义 UITableViewCell
类中实现辅助功能。我有一个相当简单的溢出菜单,里面有几个按钮,这些按钮是隐藏的,直到按下一个省略号按钮滑动打开并关闭溢出。
在我的单元格初始化程序中,我将 overflowContainer
的 accessibilityElementsHidden
设置为 YES
。这似乎有效,当使用 VoiceOver 滚动浏览时,这些 View 将被跳过。
然后,当打开单元格时,在 UIView
动画的完成处理程序中,我将同一 overflowContainer
的相同 accessibilityElementsHidden
设置为不。这似乎没有任何效果,那些元素仍然被跳过。
我也尝试过在更改 accessibilityElementsHidden
BOOL
之前/之后/之后发布 UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil)
,但这也会出现对情况没有影响。
基本上,我想在特定点对几个 UIView
实例切换 accessibilityElementsHidden
。谁能告诉我我可能做错了什么?
这是我在溢出打开时触发的代码:
- (void)cellOverflowDidShow:(MyCell *)cell
{
self.overflowContainer.isAccessibilityElement = YES;
self.firstButton.isAccessibilityElement = YES;
self.secondButton.isAccessibilityElement = YES;
self.thirdButton.isAccessibilityElement = YES;
UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, self.firstButton);
}
我在关闭单元格时触发相反的操作(将所有设置为 NO
并再次发布通知)。在初始化单元格时,我设置的是:
self.overflowContainer.isAccessibilityElement = NO;
完全不知道为什么它不应该工作,看来我做的一切都是 100% 正确的。如果我不在初始化程序中设置该行,按钮将全部显示为可访问(始终)。因此,第一个调用(无论是 YES
还是 NO
)似乎都有效,但任何后续调用都将被忽略。
最佳答案
在可见状态下,您将溢出容器声明为可访问性元素。因此,VoiceOver 将允许用户聚焦它而不是导航子元素。不要切换它是否是辅助功能元素,而是将 self.overflowContainer.isAccessibilityElement
设置为 NO
并切换其子元素 firstButton、secondButton 和 thirdButton 的辅助功能。
设置子元素可访问性的简写是accessibilityElementsHidden
。尝试在 View 出现时将 self.overflowContainer.accessibilityElementsHidden
设置为 NO
,在 View 消失时将其设置为 YES
。
无论如何,您可能仍然需要触发布局更改通知。
关于ios - 打开自定义 UITableViewCell 时在溢出菜单中显示/隐藏辅助功能元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25259822/