Sim*_*mon 19 accessibility uisegmentedcontrol ios kif-framework
我们使用KIF进行功能测试,并使用元素的可访问性标签来确定发送事件的位置.我目前正在尝试测试UISegmentedControl的行为,但为了做到这一点,我需要为控件的不同段设置不同的可访问性标签.如何为特定细分设置可访问性标签?
and*_*ers 19
正如Vertex所说,
OBJ-C
[[[self.segmentOutlet subviews] objectAtIndex:3] setAccessibilityLabel:@"GENERAL_SEGMENT"];
Run Code Online (Sandbox Code Playgroud)
迅速
self.segmentOutlet.subviews[3].accessibilityLabel = "GENERAL_SEGMENT"
Run Code Online (Sandbox Code Playgroud)
一些建议,所以你不要像我一样疯狂:
jma*_*mac 10
我自己刚刚开始使用KIF,所以我没有测试过这个,但它可能值得一试.我相信我很快就会遇到同样的问题,所以我很想知道它是否有效.
首先,UIAccessibility Protocol Reference在accessibilityLabel下有一条说明:
"如果提供UIImage对象以在UISegmentedControl中显示,则可以在每个图像上设置此属性,以确保可以正确访问这些段."
所以,我想知道你是否可以在每个NSString对象上设置accessibilityLabel,并且能够使用它来访问每个具有KIF的段.首先,您可以尝试创建几个字符串,设置其可访问性标签,并使用[[UISegmentedControl alloc] initWithItems:myStringArray]; 填充它.
请向我们介绍您的进度.我想知道这是怎么回事
小智 9
每个段UISegmentedControl都是UISegment类实例的子类UIImageView.您可以按subviews属性访问这些实例,UISegmentedControl并尝试以编程方式为它们添加辅助功能.
小智 8
这是一个古老的问题,但是为了防止其他任何人遇到这种情况,我发现这些网段会自动将可访问性标签指定为其文本.因此,如果添加了选项1和选项2的两个选项
[tester tapViewWithAccessibilityLabel:@"Option 2"];
Run Code Online (Sandbox Code Playgroud)
成功选择了该细分.
小智 6
使用索引子视图的解决方案不起作用,因为您不能依赖正确的顺序,并且很难更改段数。并且按原点排序不起作用,因为框架(至少对于当前版本)似乎总是在 x: 0。
我的解决方案:
(segmentedControl.accessibilityElement(at: 0) as? UIView)?.accessibilityLabel = "Custom VoiceOver Label 1"
(segmentedControl.accessibilityElement(at: 1) as? UIView)?.accessibilityLabel = "Custom VoiceOver Label 2"
(segmentedControl.accessibilityElement(at: 2) as? UIView)?.accessibilityLabel = "Custom VoiceOver Label 3"
Run Code Online (Sandbox Code Playgroud)
似乎对我有用并且顺序正确。您也不依赖图像。也不是那么漂亮,但可能比其他解决方案更可靠。
您不能依靠subviewsarray中的索引来获取位置。为了自定义单个子视图,我在设置任何属性之前将子视图在其X位置上进行排序。对于accesibilityLbel同样有效。
let sortedViews = self.subviews.sorted( by: { $0.frame.origin.x < $1.frame.origin.x } )
sortedViews[0].accessibilityLabel = "segment_full"
sortedViews[1].accessibilityLabel = "segment_not_full"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10943 次 |
| 最近记录: |