ios - 打开自定义 UITableViewCell 时在溢出菜单中显示/隐藏辅助功能元素

标签 ios objective-c uitableview accessibility uiaccessibility

我正在自定义 UITableViewCell 类中实现辅助功能。我有一个相当简单的溢出菜单,里面有几个按钮,这些按钮是隐藏的,直到按下一个省略号按钮滑动打开并关闭溢出。

在我的单元格初始化程序中,我将 overflowContaineraccessibilityElementsHidden 设置为 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/

相关文章:

ios - LaunchScreen.storyboard 在 iPhone X 上没有全高

javascript - Revenuecat React-Native 产品获得空对象?

javascript - PhoneGap/Cordova 回调错误 - RestKit 完成函数不在 PhoneGap 中执行

iphone - 当当前选定的表格单元格移出屏幕后,如何向其发送消息?

ios - Swift 尾随约束在 TableView 中无法按预期工作

objective-c - 动态计算自定义 UITableViewCell 的高度

ios - 将标签栏快速移动到屏幕顶部

ios - 从 NSData 加载 UIImage 导致不稳定的 UITableView 滚动

objective-c - NSMutableArray 和 NSDictionary 的内存泄漏

ios - 如何从NativeScript调用Objective-C NSExpression(format:…)?