如何识别 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中添加为subviewimage 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 的回答就足够了。不过,我建议使用tags 来识别子视图。

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”,而不是一个。 我说单是因为在他们的代码中,没有办法区分多个UIImageViews 是否被添加到有问题的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 中编辑表格时选择 (-) 图标

如何使用UIAutomation进行iOS自动化测试

iOS UIAutomation:访问在自动化脚本中添加到 UIScrollView 上的自定义子视图

⭐️UI自动化控制微信发送或转发图片消息✨

如何通过 UIAutomation 处理“_APPNAME_ 想要使用您当前的位置”警报