3

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

在我的单元格的初始化程序中,我将我的accessibilityElementsHidden设置overflowContainerYES. 这似乎有效,当使用 VoiceOver 滚动时,这些视图被跳过。

然后,当打开单元格时,在UIView动画的完成处理程序中,我将相同accessibilityElementsHidden的相同设置overflowContainer为 NO。这似乎没有任何效果,那些元素仍然被跳过。

我也尝试过UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil)在更改之前/之后/时发布accessibilityElementsHidden BOOL,但这似乎也对这种情况没有影响。

基本上我想在特定点切换accessibilityElementsHidden几个实例。UIView谁能让我知道我可能做错了什么?

这是我在溢出打开时触发的代码:

- (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% 正确的。如果我没有在初始化程序中设置该行,则所有按钮似乎都可以访问(一直)。因此,似乎第一个调用,无论是YESor NO,都有效,但任何后续调用都将被忽略。

4

1 回答 1

2

在可见状态下,您将溢出容器声明为可访问性元素。因此,VoiceOver 将允许用户集中注意力而不是导航子元素。不要切换它是否是可访问性元素,而是保持self.overflowContainer.isAccessibilityElement设置NO并切换其子元素 firstButton、secondButton 和 thirdButton 的可访问性。

设置子元素可访问性的简写是accessibilityElementsHidden. 尝试设置self.overflowContainer.accessibilityElementsHidden视图NO出现和YES消失的时间。

无论如何,您可能仍需要触发布局更改通知。

于 2014-08-14T19:03:43.737 回答