【问题标题】:How would I compare UIButton backgroundImage title?我将如何比较 UIButton backgroundImage 标题?
【发布时间】:2011-04-01 09:22:45
【问题描述】:

在 UIButton 上我设置了这样的背景图片

[twitterButton setBackgroundImage:twitterImage forState:UIControlStateNormal];

twitterImage 是 UIImage 类型

现在在代码中点击任何按钮的某处,我使用标签值设置了 twitterButton 图像

[twitterButton setBackgroundImage:twitterImage1 forState:UIControlStateNormal];

我的问题是如何比较 twitterButton 的图像?

这种情况不起作用if([twitterbutton.imageView.image isEqual:twitterImage1])

请帮忙

【问题讨论】:

    标签: iphone uiimageview uibutton uiimage compare


    【解决方案1】:

    尝试与 backgroundImageForState: 方法返回的 UIImage 进行比较,而不是 UIButton imageView 的 image 属性...

    if ([[twitterButton backgroundImageForState:UIControlStateNormal] isEqual:twitterImage1])
    

    即,

    if ([[twitterButton backgroundImageForState:UIControlStateNormal] isEqual:[UIImage imageNamed@"myImage.png"]]){
      // Button has a background image named 'myImage.png'
    }else{
      // Button has not a background image named 'myImage.png'
    }
    

    请参阅UIButton class reference 了解更多信息。

    【讨论】:

    • 刚刚试过这个 if([[twitterBtn backgroundImageForState:UIControlStateNormal]isEqual:twitterImage1]) .....不工作:(
    • 您正在加载多少个物理图像实例?如果在多个地方设置了同一个对象实例,那么这应该可以工作。否则你将不得不比较图像数据......
    • 使用标签我创建了一个实例。所有属性都像我可以更改图像一样工作...禁用...启用...但只有背景图像比较不起作用
    • 如果是同一个实例,您可以尝试 [twitterButton backgroundImageForState:UIControlStateNormal] == twitterImage1,尽管我认为默认的 isEqual 实现会进行指针比较。值得一试。
    • 由于紧急需求,我已通过标志修复了此问题。现在比较布尔标志而不是图像:)
    【解决方案2】:

    你不能比较 UIButton 的 backgroundImage。你使用一些引用变量设置 backgroundImage

    http://developer.apple.com/library/ios/#documentation/uikit/reference/UIButton_Class/UIButton/UIButton.html

    【讨论】:

      【解决方案3】:

      尝试使用 UIButton 的 currentBackgroundImage 属性。这将为您提供当前的背景图像.. UIButton Reference

      【讨论】:

      • 我试过这个 if([twitterBtn.currentBackgroundImage isEqual:@"btn_twitter_normal_small1.png"]) 它不工作.. 还有其他方法可以使用 currentBackgroundImage 属性吗?
      • 记住它返回一个 UIImage 所以你必须检查它而不是图像名称。如果这也不起作用,请尝试 isEqualTo:
      • 你可以试试[twitterBtn.currentBackgroundImage isEqual:twitterImage1]
      • 我的上帝,我被严重卡住了......好吧 UIImage 没有响应'isEqualTo:'......并根据你的建议尝试了第二个选项比较 UIImage 类型而不是 btn_twitter_normal_small1.png .. . 它仍然无法正常工作:(
      • 哦,这应该有效...您能检查一下您是否能够访问 backgroundImage。检查是否正确获取。
      【解决方案4】:

      我认为这很昂贵,但您可以尝试将图像转换为 nsdata,然后使用 isEqualToData。

      编辑

      NSData *data1=UIImagePNGRepresentation([twitterButton backgroundImageForState:UIControlStateNormal]);
      NSData *data2=UIImagePNGRepresentation(anotherUIImage);
      
      if([data1 isEqualToData:data2]){
      
      }
      

      【讨论】:

      • 我将如何比较 NSData.. 我知道情况会是这样的.. if(UIIMagePng......) ..... 但在这种情况下我将如何加载背景按钮图片?
      • 感谢您的回复...由于紧急要求,我已通过标志解决了此问题。现在比较布尔标志而不是图像:)
      • 我知道你有压力时的感觉 :)
      • 谢谢 Jorge... 但想稍后解决这个问题... 等我有空 :)
      猜你喜欢
      • 2011-08-11
      • 2015-01-04
      • 2020-03-06
      • 1970-01-01
      • 1970-01-01
      • 2012-11-17
      • 2014-09-20
      • 1970-01-01
      • 2012-02-16
      相关资源
      最近更新 更多