使用XCODE中的字符串引用UIImageView控件

时间:2011-08-08 03:35:38

标签: xcode uiimage

我有大约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,在大多数其他语言中这么简单的任务在这方面非常繁琐。

我不知所措。请帮助。

4 个答案:

答案 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。但是,请注意,使用大量图像会很快让您在移动设备上触发内存警告,因此请明智地使用。