0

为按钮设置图像时,我使用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);
 }

但这不起作用。我怎么看那个字符串?

4

5 回答 5

3

您可以使用关联的引用在加载时附加一个字符串键“名称”。您从文件中创建 UIImage,并使用 Objective-c 关联的引用 API 附加名称:here。

您还可以将 UIImage 子类化以存储额外的名称。

您甚至可以添加一个类别来提供简单的 API。

于 2012-05-28T15:35:49.630 回答
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]];
于 2012-05-28T15:44:40.827 回答
2

不,你不能。

buttonImage.image是一个 UIImage 存储在按钮内部的内存中。

[UIImage imageNamed:@"myImage_2.png"]创建一个完全不同的 UIImage。两个 UIImage 很可能是从同一个文件创建的——在这种情况下,——@"myImage_2.png"但它们是内存中的两个独立的 UIImage。

检查您的==线路:

if(buttonImage.image == [UIImage imageNamed:@"myImage_2.png"])

不检查 UIImages 是否是从同一个文件创建的;它检查它们是否指向内存中的相同位置。它们不是,因为它们是两个单独创建和存储的 UIImage 实例。

--

所以,不——你不能这样做。但是,可能以另一种方式解决您的问题的方法是将 UIButton 子类化并正确添加NSString* imageFilename. (如果您为每种控制状态设置不同的图像,则需要多个变量来存储这些图像文件名)。然后重写setImage:forControlStateUIButton 子类的方法,并在每次更改图像时将文件名存储在那里。然后您可以执行以下检查:

if([imageFileName isEqualToString:[[NSString stringWithFormat:@"myImage_%d.png", selectNum + 1 ]])

这会给你你想要的答案!

于 2012-05-28T15:50:55.757 回答
1

您可以将 UIImage 存储为类的实例,并进行比较。您不会使用比指针更多的内存。

于 2012-05-28T15:30:53.977 回答
0

selectNum代表选中的图片对吧

于 2012-05-28T15:41:12.320 回答