为按钮设置图像时,我使用stringWithFormat:
,如下所示:
[buttonImage setImage:[ImgUtil image:[NSString stringWithFormat:@"myImage_%d.png", selectNum + 1 ]] ];
我想检查那个字符串。我想也许我可以从按钮上取回名字:
if (buttonImage.image == [UIImage imageNamed:@"myImage_2.png"]) {
NSLog(@"the name of the buttonImage is %@", buttonImage.image);
}
但这不起作用。我怎么看那个字符串?
答案 0 :(得分:3)
您可以使用关联引用在加载时将字符串“name”附加到字符串。您从文件创建UIImage,并使用objective-c关联的引用API附加名称:here.
您还可以对UIImage进行子类化以存储额外的名称。
您甚至可以添加类别以提供简单的API。
答案 1 :(得分:2)
如果您想要的是"测试" myImage_%d.png"最终成为"在以下行中:
[buttonImage setImage:[ImgUtil image:[NSString stringWithFormat:@"myImage_%d.png", selectNum + 1 ]] ];
然后我建议您重新格式化并简化代码。它将为您提供更易于阅读的额外优势:
NSString* imageName = [NSString stringWithFormat:@"myImage_%d.png", selectNum + 1 ];
NSLog(@"imageName is %@", imageName);
[buttonImage setImage:[ImgUtil image:imageName]];
答案 2 :(得分:2)
不,你不能。
buttonImage.image
是存储在按钮内存中的UIImage。
[UIImage imageNamed:@"myImage_2.png"]
创建了一个完全不同的UIImage。两个UIImages都可以从同一个文件创建 - 在本例中为@"myImage_2.png"
- 但它们在内存中是两个独立的UIImages。
==
检查您的行:
if(buttonImage.image == [UIImage imageNamed:@"myImage_2.png"])
不检查UIImages是否是从同一个文件创建的;它会检查它们是否指向内存中的相同位置。它们不是,因为它们是两个单独创建和存储的UIImage实例。
-
所以,不,你不能这样做。但是,可能以另一种方式解决问题的方法是继承UIButton并正确添加NSString* imageFilename
。 (如果您为每个控件状态设置不同的图像,则需要多个变量来存储这些图像文件名)。然后覆盖UIButton子类的setImage:forControlState
方法,并在每次更改图像时将文件名存储在那里。然后,您可以执行以下检查:
if([imageFileName isEqualToString:[[NSString stringWithFormat:@"myImage_%d.png", selectNum + 1 ]])
那会得到你想要的答案!
答案 3 :(得分:1)
您可以将UIImage存储为类的实例,并进行比较。你不会使用比指针更多的内存。
答案 4 :(得分:0)
selectNum代表所选图像,对吗?如果是,请在选择图片时尝试获取selectNum。