可以重置 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 背景图像吗?的主要内容,如果未能解决你的问题,请参考以下文章