可以重置 UIButton 背景图像吗?

Posted

技术标签:

【中文标题】可以重置 UIButton 背景图像吗?【英文标题】:Possible to reset UIButton background image? 【发布时间】:2012-02-09 20:45:40 【问题描述】:

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

        [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 来完成,还是我只需要删除原始按钮并创建一个新按钮?

【问题讨论】:

你是说 setBackgroundImage:forState: 不工作? @picciano - 是的,我更新了错误消息。 请说出什么是编辑,什么是原始问题 【参考方案1】:

这里有内存管理问题。

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

这意味着您的thumbnailButton 不是指向UIButton,而是指向UITableViewCellContentView。这可能是由于分配不当或 UIButton 被释放(在这种情况下您有一个悬空指针)而发生的。运行分析器并仔细检查您对按钮的使用。

UIButton buttonWithType 返回一个自动释放的实例,所以你需要保留它。

【讨论】:

【参考方案2】:

在UIButton class reference 中可以读到可以使用setBackground:forState: 方法。

【讨论】:

【参考方案3】:

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

UIButton *sampleButton = [UIButton buttonWithType:UIButtonTypeCustom];

【讨论】:

以上是关于可以重置 UIButton 背景图像吗?的主要内容,如果未能解决你的问题,请参考以下文章

UIButton 背景图片可以支持动态类型吗?

UIButton 背景图像 以编程方式更改

UIButton背景图像不清晰

使用 UIView 作为 UIButton 的背景?

我可以为几个 UIButton 创建一个彩色背景吗?

如何制作带有浮雕背景图像的 UIButton?