可以重置UIButton背景图片吗?

时间:2012-02-09 20:45:40

标签: iphone ios cocoa-touch uibutton

我有一个应用程序,我最初设置UIButton的背景图像,然后需要稍后将其更改为其他内容。我确实知道我可以删除原始按钮并为新图像分配一个新按钮,但我更愿意提高效率并重用我已经分配的对象。有可能这样做吗?我注意到currentBackgroundImage属性是readonly,所以当我尝试像:

这样的东西时
        [thumbnailButton setBackgroundImage:nil forState:UIControlStateNormal];
        [thumbnailButton setBackgroundImage:[UIImage imageWithCGImage:[[photos objectAtIndex: currentPhotoIndex] thumbnail]] forState:UIControlStateNormal];

或只是:

        [thumbnailButton setBackgroundImage:[UIImage imageWithCGImage:[[photos objectAtIndex: currentPhotoIndex] thumbnail]] forState:UIControlStateNormal];

我得到以下内容:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewCellContentView setBackgroundImage:forState:]: unrecognized selector sent to instance 0x16c570'

是否可以使用UIButton完成,或者我只是需要删除原始按钮并创建一个新按钮?

3 个答案:

答案 0 :(得分:4)

这里有内存管理问题。

  

* 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [UITableViewCellContentView   setBackgroundImage:forState:]:发送到实例的无法识别的选择器   0x16c570'

这意味着您的thumbnailButton并未指向UIButton,而是指向UITableViewCellContentView。这可能是由于不正确的赋值或者如果UIButton被释放(在这种情况下你有一个悬空指针)。运行分析仪并仔细检查您对按钮的使用。

UIButton buttonWithType返回一个自动释放的实例,因此您需要保留它。

答案 1 :(得分:2)

UIButton class reference中,您可以读到可以使用方法setBackground:forState:

答案 2 :(得分:1)

这应该可以正常工作。我认为Button必须是一个自定义按钮。

UIButton *sampleButton = [UIButton buttonWithType:UIButtonTypeCustom];