Ios 如果UITableViewCell中的UIButton为';它的UITableView';只有一个
如果Ios 如果UITableViewCell中的UIButton为';它的UITableView';只有一个,ios,uitableview,uibutton,uiaccessibility,kif,Ios,Uitableview,Uibutton,Uiaccessibility,Kif,如果UITableViewCell中嵌入了UITableViewCell的ui按钮,则自动点击该按钮时遇到问题。这是在KIF的UI自动化环境中实现的 这是我的相关电话: [tester tapViewWithAccessibilityLabel: @"LABEL" traits: UIAccessibilityTraitButton]; // trait only spec
UITableViewCell
中嵌入了UITableViewCell
的ui按钮,则自动点击该按钮时遇到问题。这是在KIF的UI自动化环境中实现的
这是我的相关电话:
[tester tapViewWithAccessibilityLabel: @"LABEL"
traits: UIAccessibilityTraitButton];
// trait only specified for 2nd case below
以下是我观察到的情况:
- 如果我将辅助功能标签放在
UITableViewCell
KIF的KIFUITestActor-waitforaccessibility元素:视图:withLabel:traits:tappable:
返回UITableView
,而不是单元格。不知何故,该表似乎继承了它唯一的子级可访问性标签,并让KIF在递归搜索中首先遇到它
- 如果我将辅助功能标签放在
UIButton
上,KIF会找到它,但确定它不可点击(即UIView kifaditions-tappablePointInRect:
返回NO
),可能是因为按钮标签的细字体行之间主要是透明的(点击进入UITableViewCellContentView
)
解决方法可能是通过它的nsindepath
点击行,但可能还有更好的方法来克服我所面临的障碍。那么,我如何通过调用tapView…
,指示KIF点击这样的按钮呢?这只是为了确认此解决方法是否适用:
[tester tapRowAtIndexPath: [NSIndexPath indexPathForRow: 0 inSection: 0]
inTableViewWithAccessibilityIdentifier: @"IDENTIFIER"];
“好”的解决方案应该是这样的:
UITableViewCell *cell = [tester waitForCellAtIndexPath:indexPath inTableViewWithAccessibilityIdentifier:tableAccessibilityIdentifier];
UIAccessibilityElement *element = [cell accessibilityElementWithLabel:accessibilityLabel traits:UIAccessibilityTraitButton];
[tester tapAccessibilityElement:element inView:cell];
不幸的是,它没有按预期工作。有时元素
是一个UIAccessibilityYelementMockView
,在步骤3中点击它意味着只点击底层单元格。结果自然不会如预期的那样
我终于设法解决了这个问题,我做了以下几点:
MyCustomCellClass *cell = (MyCustomCellClass *)[self waitForCellAtIndexPath:indexPath inTableViewWithAccessibilityIdentifier:tableAccessibilityIdentifier];
[cell.buttonOutlet sendActionsForControlEvents:UIControlEventTouchUpInside];
请注意,这意味着
减少对UI交互的依赖
有一个自定义类
有按钮出口的
但是,嘿,苹果不支持KIF,所以它有时会中断:)如果您在代码中创建单元格,请确保将您的按钮添加到cell.contentView
如果您是从xib加载单元格,请尝试使用以下方法将contentView发送到视图层次结构的后面(我还没有发现这样做的任何缺点):
我不认为这是一个合格的答案,因为你没有点击电池内部的按钮,只是电池本身,这不是问题所在。
[self sendSubviewToBack:self.contentView];