iOS获取UINavigationBar的后退按钮以设置辅助功能属性

时间:2014-06-20 01:27:54

标签: ios uinavigationcontroller uinavigationbar

我有一个导航控制器堆栈,其中一个视图具有动态标题。

视图控制器及其标题如下:

Main       -->  ItemsTableView  -->  ItemDetails
Title:Main      Title: NN Items      Title: Details

因为iOS UINavigationController将“后退”按钮的文本设置为上一个屏幕的标题,所以详细信息屏幕上的“后退”按钮显示“&lt; NN Items”,其中NN是动态变化的数字。< / p>

我正在尝试进行一些iOS UI自动化,但后退按钮的可访问性标签/ ID由系统设置为它的按钮文本。这意味着详细信息屏幕上后退按钮的可访问性标签将动态更改,我无法从我的脚本中找到它!

如果我可以获得对UIBarButtonItem的引用,那么我可以轻松地将代码中的accessibilityLabelaccessibilityIdentifier设置为固定字符串,但是我无法弄清楚如何执行此操作? / p>

我已经能够通过self.navigationItem.backBarButtonItem或类似内容找到后退按钮设置为自定义按钮的所有内容,但是当我读取此属性时,它是{{1} }。我无法找到如何访问标准项而不替换它。如果可能的话,我宁愿不更换按钮

1 个答案:

答案 0 :(得分:6)

这也困扰着我。我一直在编写Xcode 7 UI测试,并试图想出一种点击后退按钮的通用方法,而不必用自定义按钮替换它。

以下是我为Xcode 7 UI测试解决这个问题的方法 - 但您也可以将其应用于UI自动化。

我发现(至少在Xcode 7 UI测试方面)系统创建的后栏按钮项目由两个按钮组成,整个事物是一个按钮,其按钮的标题是无论按钮的标题是什么,然后箭头也是一个按钮,其可访问性标签为“返回”。

因此,只要屏幕上没有任何其他标识为“后退”的按钮,就可以通过“返回”的辅助功能标签访问后退按钮。就像UI测试一样:

[[app.buttons matchingIdentifier:@"Back"] elementBoundByIndex:0]

这里我得到了第一个可以通过“返回”识别的按钮。在我的情况下,只能有两个这样的按钮 - 箭头或整个后退按钮本身(在后退按钮的标题也是“后退”的情况下)。由于这两个按钮基本相同,只需找到它找到的第一个按钮即可。