iOS无障碍功能 - 如何为UINavigationBar的标题设置辅助功能标签?

16

苹果的语音提示在UINavigation Controller中的一个视图中错误发音了标题。

在应用程序的其他部分中,我已经添加了自定义可访问标签,以帮助它正确发音公司名称。如何设置UINavigationBar的可访问性标签?

4个回答

26

这适用于iOS 8.2。在viewDidLoad中:

self.navigationItem.accessibilityLabel = @"My accessible label";

当导航控制器转换到视图控制器时,会读取 accessibilityLabel 而不是视图控制器的 title


在我的iOS 7.1.2上运行良好。这是完美的答案,应该被选为正确答案。 - Vlad
1
嗨,当导航项“titleView”被设置时,我无法使其工作。(没有titleView时完美运行,但这违背了我的目的...)有人成功做到了吗?谢谢。 - amadour
@amadour 我猜你需要在自定义的 titleView 上设置 accessibilityLabel。如果你的 titleView 里面有一个 UILabel,你也可以尝试在它上面设置 accessibilityLabel - stevekohls
谢谢@stevekohls,我也尝试过了,但是当视图控制器被推送时,仍然无法读取它。如果我在这方面取得进展,我会在这里发表评论。 - amadour
似乎没有 self.navigationItem.accessibilityIdentifier。为什么会这样? - Chris Prince
1
@ChrisPrince UINavigationItem 继承自 NSObject。在 NSObject 上有一个类别 UIAccessibility,它提供了accessibilityLabel。请参见 UIKit/Headers/UIAccessibility.h - stevekohls

15

我无法添加可访问性标签,但我找到了一个解决方法:

我将navigationItem的标题视图替换为设置有可访问性的UILabel。

UILabel *titleLabel = [[UILabel alloc] init];
titleLabel.text = @"myTitle";
[titleLabel setAccessibilityLabel:@"myCustomAccessiblityLabel"];
[titleLabel setFont:[UIFont boldSystemFontOfSize:20.0]];
[titleLabel setBackgroundColor:[UIColor clearColor]];
[titleLabel setTextColor:[UIColor whiteColor]];
[titleLabel sizeToFit];
self.navigationItem.titleView = titleLabel;

我不确定为什么设置辅助功能标签无法正常工作,但上述代码满足我的需求。


2
感谢您发布您的解决方案!UINavigationBar的问题可能值得向苹果报告。他们在处理与辅助功能相关的错误报告方面非常出色(包括我上面提到的UIBarButtonItem问题)。 - Turix

0

由于UINavigationBar继承自UIView,因此您应该能够设置其accessibilityLabel属性。尝试:yourUINavigationBar.accessibilityLabel = @"title";

此外,您可能需要确保它被标记为可访问元素,使用yourUINavigationBar.isAccessibilityElement = YES;(并且不在另一个也被标记为可访问元素的视图内)。 (我猜测最后一部分可能是问题所在,因为您似乎已经知道了可访问性标签。您可以在模拟器中使用辅助功能检查器来查看是否存在这种情况,方法是在点击元素时查看其周围的框是否比导航栏更大。)


很抱歉,那对我没有起作用。我设置了isAccessibilityElement = YES,而且标题不在标记为辅助功能元素的另一个视图内。 - Robert Wagstaff
@RobertWagstaff 抱歉!我承认我从未遇到过这个问题,但我想也许你需要对UINavigationItem对象的titleView属性执行此操作。(顺便说一句,这似乎类似于我以前在可访问性UIBarButtonItem方面遇到的问题,它不像“正常”的UIView相关内容那样运作。) - Turix
仍然没有成功,我尝试了:self.navigationItem.title = @"我的标题"; [self.navigationItem.titleView setIsAccessibilityElement:YES]; [self.navigationItem.titleView setAccessibilityLabel:@"辅助功能标题"];放在loadView里面。 - Robert Wagstaff

0

有一种相似的解决方法,我已经在 iOS 11 和 12 上进行了测试,可以按预期工作。对于 navigationItem.titleView,设置一个 UILabel 对象,然后为 navigationItem.titleView 设置您的可访问性标识符。

self.navigationItem.titleView = YOUR_CUSTOM_UILABEL;

accessibilityIdentifier 部分

self.navigationItem.titleView.accessibilityIdentifier = YOUR_ACCESSIBILITY_IDENTIFIER;

你可以使用Xcode的辅助功能检查器来查看你的标识符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接