UIBarButtonItem 如何禁用辅助功能 (iOS)

Posted

技术标签:

【中文标题】UIBarButtonItem 如何禁用辅助功能 (iOS)【英文标题】:UIBarButtonItem How to Disable Accessibility (iOS) 【发布时间】:2015-08-27 18:30:34 【问题描述】:

所以,

我正在尝试禁用已添加到 UINavigationController 的 leftBarButtonItems 的 UIBarButtonItem 的 VoiceOver 可访问性。虽然我可以为没有标题的按钮禁用它,但我似乎无法为有标题的按钮禁用它。例如:

// Create the legend UIBarButtonItem
UIBarButtonItem *legendMenuBarItem = [[UIBarButtonItem alloc] initWithTitle:@"Legend" style:UIBarButtonItemStylePlain target:tool action:@selector(activate)];

// Should disable accessibility on the button, still enabled for subviews
[legendMenuBarItem setIsAccessibilityElement:FALSE];

// Remove "button" from VoiceOver speech for the button 
[legendMenuBarItem setAccessibilityTraits:UIAccessibilityTraitNone];

// Removed "Legend" from being spoken, but the button is still tappable in accessibility mode 
[legendMenuBarItem setAccessibilityLabel:@" "]; 

// Attempt to remove any accessibility elements... no real effect
[legendMenuBarItem setAccessibilityElements:nil]; 

// Supposedly this should disable all subviews from being accessible? Doesn't work...
[legendMenuBarItem setAccessibilityElementsHidden:TRUE]; 


// Add legend UIBarButtonItem to the end of the leftBarButtonItems 
NSMutableArray *currentLeftBarItems = [NSMutableArray arrayWithArray:[self.navigationItem leftBarButtonItems]];
[currentLeftBarItems addObject:legendMenuBarItem];
[self.navigationItem setLeftBarButtonItems:currentLeftBarItems];

我尝试了各种方法来禁用 VoiceOver,但即使在当前的设置中,当我点击按钮时它仍然显示“Legend”。

我尝试过的更多场景:

这会禁用所有语音(需要),但仍允许按钮进行交互(不需要):

[legendMenuBarItem setAccessibilityLabel:@" "]; 
[legendMenuBarItem setIsAccessibilityElement:TRUE];
[legendMenuBarItem setAccessibilityTraits:UIAccessibilityTraitNone];

据推测,这应该为 UIBarButtonItem 及其子视图禁用 VoiceOver(需要),但它不会(不需要):

[legendMenuBarItem setIsAccessibilityElement:TRUE];
[legendMenuBarItem setAccessibilityElementsHidden:TRUE]; 

总之...我的问题是如何完全禁用可访问的交互性?通常我使用setIsAccessibilityElement:FALSE,效果很好。但这次没有这样的运气。

谢谢!

【问题讨论】:

我认为栏按钮项目将提供可访问性选项,以便我可以在情节提要上禁用它,但它只显示某些元素。' 请让我知道我的答案是否有效。 @Kivak 狼 @TejaNandamuri,你找到解决方案了吗? 【参考方案1】:

setAccessibilityElementsHidden 仅在该 UIElement 中确实包含一些元素时才有效。

尝试将setAccessibilityElementsHiddenYES 用于工具栏或存在您的栏按钮的容器。

编辑:如果您不希望特定栏按钮的可访问性,那么您需要将该按钮添加到工具栏的可访问性元素中,即NSArray,然后根据您的要求将其隐藏。

编辑:这禁用了导航项的可访问性

  self.navigationController.navigationBar.accessibilityElementsHidden=YES;

【讨论】:

我添加了 [self.navigationItem setAccessibilityElements:@[legendMenuBarItem]]; [self.navigationItem setAccessibilityElementsHidden:TRUE]; 行,这并没有影响任何事情。同样与self.navigationController.navigationBar what :O ...我试过了,它对我有用。我的视图控制器中嵌入了一个导航控制器。 您可以在您的故事板中为您的视图控制器发布视图层次结构的屏幕截图吗? 我不使用情节提要,这完全是程序化的。我也在使用 ios 8.4

以上是关于UIBarButtonItem 如何禁用辅助功能 (iOS)的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式禁用/启用UIBarButtonItem

如何知道用户是不是在“设置”->“辅助功能”中禁用了透明度?

如何使用两个单独的 UIBarButtonItem 禁用/启用 UIPanGestureRecognizer?

如何启用从设置中删除动画-> 辅助功能 android

为啥 UIBarButtonItem 默认是禁用的?

为啥 UIBarButtonItem 显示为禁用? [复制]