我有大约10个名为pop1的UIImageView控件到pop10。
我在UIImageView上各有10个按钮。按钮有一个1到10的“标签”,所以我知道按下了哪个按钮:
UIButton * aButton =(UIButton *)sender;
aButton.tag - gives me the tag
我想在按钮下面引用UIImageView来按下它上面的按钮来改变它的图像:
UIImage *image = [UIImage imageNamed: @"NewImage.png"];
[pop1 setImage:image];
但是在上面的代码中我不想硬编码“pop1”或“pop2”等。我想使用按钮标签构建一个字符串
NSString *img = [NSString stringWithFormat:@"pop%d",aButton.tag];
给我“pop1”或“pop2”等,因为我使用的是aButton.tag。
因此,使用此信息如何编写代码来引用UIImage来更改其图像?
在他的行中,需要更改“pop1”,因此它使用构建的字符串 - img:
[pop1 setImage:image];
我不想为每个标签键入switch语句,因为我打算添加大量此类控件,这不是一个选项。
有什么方法或者我可以使用其他任何方法吗?
更新
我在这样的代码中尝试了John给出的答案
-(IBAction)pop:(id)sender{
UIButton * aButton =(UIButton *)sender;
NSLog(@"clicked button with TAG %d",aButton.tag);
if (aButton.tag > 0) {
UIImageView *img = (UIImageView *)[self.view viewWithTag:aButton.tag];
UIImage *ix = [UIImage imageNamed:@"Newimage.png"];
[img setImage:ix];
// stop any more clicks
aButton.tag = 0;
}
}
一切都建立正常,但在运行时,我收到错误,因为“img”在调试窗口中显示为“UIButton”而不是UIImage(我认为)。
我完全对此感到困惑,因为在IB中控件显示为Class:UIImageView但在代码中我将其引用为UIImage?它们可以互换吗?
如何访问“UIImageView - 显示由图像数组描述的单个图像或动画(帮助)”的“tag”属性
基本上按钮也有一个标签,所以如果单击按钮2,它的标签是2.所以我想用tag = 2改变UIImageView的图像,依此类推。
我目前正在学习C / C,在大多数其他语言中这么简单的任务在这方面非常繁琐。
我不知所措。请帮助。
答案 0 :(得分:3)
将UIImageView
标记-1添加到-10,然后将pop
函数替换为:
-(IBAction)pop:(id)sender{
UIButton * aButton =(UIButton *)sender;
NSLog(@"clicked button with TAG %d",aButton.tag);
if (aButton.tag > 0) {
UIImageView *img = (UIImageView *)[self.view viewWithTag:(aButton.tag*-1)];
UIImage *ix = [UIImage imageNamed:@"Newimage.png"];
[img setImage:ix];
// stop any more clicks
}
}
答案 1 :(得分:0)
将标记放在关联的视图上 - 比如说101-110然后取出按钮标记,向其添加100,然后用该数字调用viewWithTag ......
答案 2 :(得分:0)
我建议您使用UIButton而不是UIImageView。将图像设置为按钮图像,并为其指定标记,但这会使用户单击图像而不是单独的按钮。
答案 3 :(得分:0)
您可以迭代视图的子视图,并以这种方式访问每个UIImageView。但是,请注意,使用大量图像会很快让您在移动设备上触发内存警告,因此请明智地使用。