如何使用 imageForState 获取按钮的当前图像?
Posted
技术标签:
【中文标题】如何使用 imageForState 获取按钮的当前图像?【英文标题】:How to get a button's current image using imageForState? 【发布时间】:2013-06-09 17:44:10 【问题描述】:我在 xcode 中找到了一个名为 imageForState 的属性,但无法让它做我想做的事。当按下按钮时,我想根据按钮的图像执行一段代码。
- (IBAction)favButton:(UIButton *)sender
NSString *currentImage = [sender imageForState:UIControlStateNormal];
if([currentImage isEqualToString:@"already_fav"])
// execute code
但是,我得到了错误:
Incompatible pointer types initializing NSString _strong with an expression type of UIImage
有人能告诉我如何解决这个问题吗?
【问题讨论】:
仔细阅读..错误解释了一切:)..您还应该再看一下方法命名..它们在 obj C 中具有超级描述性 我理解错误信息,但想知道如何将当前显示的图像名称作为字符串值获取,显然我的代码无法正常工作,因为它将苹果与橙子进行比较 不是创建 UIImage 对象,有什么方法可以只显示用于显示图像的文件名字符串? 您无法获取字符串值。您应该将图像与同一图像的另一个实例进行比较...或使用子类/其他方式来解决您的查询 【参考方案1】:我确信您无法将字符串与图像进行比较。不过有一个解决方案。您所要做的就是为您要比较的图像设置标签,并设置您要比较的图像的标签。
image1.tag = 1;
image.tag =1;
if(image1.tag == image.tag)
// execute code
这应该会有所帮助,我希望它会有所帮助。
所以,对于这个练习,我会告诉你。将 NSString 更改为 UIImage
UIImage *currentImage = [sender imageForState:UIControlStateNormal];
currentImage.tag = 1;
wantedImage.tag = 1;
if(currentImage.tag == wantedImage.tag)
// do something
希望这对您有所帮助:)
【讨论】:
【参考方案2】:当您创建 UIImage 时,它只是一个图像并且没有附加字符串值。 UIImage 对象不携带该名称。
如果是我(这不是唯一的解决方案,只是另一个建议),我会创建单独的 UIImage 对象(取决于我们在这里讨论的数量),因为这应该可以检查,而字符串不是。
例如:
UIImage *image1 = [UIImage imageNamed:@"randomName"];
UIImage *image2 = [UIImage imageNamed:@"anotherRandomName"];
[myButton setImage:image2 forState:UIControlStateNormal];
if ([myButton imageForState:UIControlStateNormal] == image1)
NSLog(@"The button shows image 1 for normal state");
else if ([myButton imageForState:UIControlStateNormal] == image2)
NSLog(@"The button shows image 2 for normal state");
else
NSLog(@"Error!!!!!!! :D");
【讨论】:
【参考方案3】:您不能将图像保存为字符串
试试
UIImage *currentImage = [sender imageForState:UIControlStateNormal];
你可以检查:
if(currentImage == [UIImage imageNamed:@"already_fav"])
【讨论】:
【参考方案4】:我这样做是为了在按钮上切换声音/无声音图像:
- (IBAction)soundAction:(id)sender
UIImage *sound = [UIImage imageNamed:@"sound"];
UIImage *noSound = [UIImage imageNamed:@"noSound"];
if ([[sender currentImage] isEqual:sound])
NSLog(@"IF SOUND IMAGE");
[sender setImage:noSound forState:UIControlStateNormal];
//your code
else if([[sender currentImage] isEqual:noSound])
NSLog(@"IF NO SOUND IMAGE");
[sender setImage:sound forState:UIControlStateNormal];
//your code
【讨论】:
以上是关于如何使用 imageForState 获取按钮的当前图像?的主要内容,如果未能解决你的问题,请参考以下文章
MS ACCESS - 如何在更改事件中获取未绑定组合框的当前列值
如何在我的 DataGrid 中获取所选单元格的当前列(C# WPF 应用程序)
覆盖 - (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state 用于笔尖
pandas使用to_datetime函数将字符串时间数据列转化为时间对象数据列通过DatetimeProperties对象获取日期对象的当年第几个月信息(month)