我有一个应用程序,我最初设置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完成,或者我只是需要删除原始按钮并创建一个新按钮?
答案 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];