如何识别 UIAutomation 中添加到 UIButton 的子视图(imageviews)?
Posted
技术标签:
【中文标题】如何识别 UIAutomation 中添加到 UIButton 的子视图(imageviews)?【英文标题】:How to identify the subviews (imageviews) addeded to the UIButton in UIAutomation? 【发布时间】:2014-08-14 06:04:08 【问题描述】:我有一个UIButton
,按钮background
设置为image
。添加
image view
在按钮的右上角,我设置了它
单击按钮以显示选择时,切换到不同的图像。
当我尝试使用instruments
automate
时。我没有看到任何subviews
UIAutomator
.logElementTree()
方法中的 (image views
) 未显示
任何image views
。
如何识别UIButton
中添加为subview
的image views
?
这里是代码。
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(40, 40, 100, 100);
[button addTarget:self action:@selector(didTapButton:) forControlEvents:UIControlEventTouchUpInside];
[button setBackgroundImage:[UIImage imageNamed:@“testImage.png”] forState:UIControlStateNormal];
UIImageView *imageview = [[UIImageView alloc] initWithImage:image];
imageview.frame = CGRectMake(70,30,20,20);
[button addSubview:imageview];
【问题讨论】:
【参考方案1】:你必须设置accessibilityEnabled和accessibilityLabel。
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(40, 40, 100, 100);
[button addTarget:self action:@selector(didTapButton:) forControlEvents:UIControlEventTouchUpInside];
button.accessibilityEnabled = YES;
button.accessibilityLabel =@"My Button";
[button setBackgroundImage:[UIImage imageNamed:@“testImage.png”] forState:UIControlStateNormal];
UIImageView *imageview = [[UIImageView alloc] initWithImage:image];
imageview.accessibilityEnabled = YES;
imageview.accessibilityLabel = @"My Image";
imageview.frame = CGRectMake(70,30,20,20);
[button addSubview:imageview];
Refer this tutorial
【讨论】:
【参考方案2】:如果您有一个 UIImageView
子视图,Sweet Angel 的回答就足够了。不过,我建议使用tag
s 来识别子视图。
imageView.tag = 1346;//Any arbitrary number (I am unsure if there are any limitations to the values you can use, but all 4 digit numbers work fine for me).
然后获取imageView:
UIImageView* imageView = (UIImageView*)[button viewWithTag:1346];
就是这样。
【讨论】:
我现在看到了您的编辑。我从未与UIAutomation
合作过,所以我不确定这是否满足您的需求。我很抱歉。
更正:如果您有多个 UIImageView 子视图,Sweet Angel 的答案就足够了。因为他/她正在访问“sender.subviews”,而不是一个。
我说单是因为在他们的代码中,没有办法区分多个UIImageView
s 是否被添加到有问题的superView(UIButton
这里)。当然,可以添加条件来确保(例如检查图像、框架等)。另一方面,tag
为您提供您正在寻找的特定视图。
另外,不要只使用 viewWithTag 访问。包括验证会更好。例如: UIImageView* imageView = [[button viewWithTag:1346] isKindOfAClass:[UIImageView class]]?(UIImageView*)[button viewWithTag:1346]:nil;
@Ramshad,您的代码是正确的,但如果您在视图上设置了唯一标签,并且确定带有标签的视图是 UIImageView
,则这是多余的。但是,添加验证并没有什么坏处。【参考方案3】:
如果您想识别按钮上的图像视图,请尝试以下代码:
- (IBAction)didTapButton:(UIButton *)sender
for (id view in sender.subviews)
if ([view isKindOfClass:[UIImageView class]])
NSLog(@"Image view captured.....");
【讨论】:
我想在 UIAutomation 中识别添加到 UIButton 中的子视图(imageview),而不是在 ios 中。以上是关于如何识别 UIAutomation 中添加到 UIButton 的子视图(imageviews)?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Xcode 机器人在模拟器上运行 UIAutomation
如何在 Iphone UIAutomation 中编辑表格时选择 (-) 图标