UIButton 的不同状态不起作用

Posted

技术标签:

【中文标题】UIButton 的不同状态不起作用【英文标题】:Different states for UIButton not working 【发布时间】:2011-06-01 15:35:18 【问题描述】:

我已经编写了这段代码来查看不同的图像状态...

UIButton *btnComment = [UIButton buttonWithType:UIButtonTypeCustom];
btnComment.tag=indexPath.row;
[btnComment addTarget:self action:@selector(goToComment:)forControlEvents:UIControlEventTouchDown];

UIImage *img1 = [UIImage  imageNamed:@"commentbtndown.png"];
UIImage *img2 = [UIImage  imageNamed:@"commentbtnup.png"];
UIImage *img3 = [UIImage  imageNamed:@"commentbtnover.png"];

[btnComment setImage:img1 forState:UIControlStateNormal];
[btnComment setImage:img2 forState:UIControlStateHighlighted];
[btnComment setImage:img3 forState:UIControlStateSelected];
[btnComment setImage:img2 forState:(UIControlStateHighlighted+UIControlStateSelected)];

btnComment.frame            =CGRectMake(0, 100, 95, 25);
[cell addSubview:btnComment];

[img1 release];
[img2 release];
[img3 release];

但它不起作用,它总是向我显示图像 1。

附言我已经在表格视图单元格中添加了这些图像

【问题讨论】:

你的按钮会消失吗? nops...显示很好..工作正常..但是这些该死的状态不会改变 【参考方案1】:

问题是您使用自动释放方法imageNamed 创建UIImage 对象,然后释放这些对象,这导致您的按钮具有无效对象,因此图像将不会显示

尝试删除这行代码,您的按钮将起作用

[img1 release];
[img2 release];
[img3 release];

此外,如果您希望按钮接收触摸事件,则必须将其添加到单元格对象的 contentView 中,否则将显示按钮但您将无法点击它。

[cell.contentView addSubview:btnComment]

【讨论】:

【参考方案2】:

您的代码的一个问题是您不应该释放这些图像变量。 imageNamed: 返回一个自动释放的UIImage。不过,我怀疑这是否会导致您的问题。

尝试使用| 而不是+ 进行第四次setImage 通话。

【讨论】:

【参考方案3】:

您的代码的另一个问题是将按钮添加到 UITableViewCell 的位置。而不是这个:

[cell addSubview:btnComment];

您应该将子视图添加到单元格的contentView

[cell.contentView addSubview:btnComment];

但我也不确定这是否会导致您的问题...

【讨论】:

您的图片加载正常吗?文件名拼写正确等? 是的,它们是,...我已将我的 tableview 的属性设置为非选中,这可能是个问题吗? 嗯.. 你的表格视图、单元格和按钮中至少需要有userInteractionEnabled = YES 在您的单元格上设置multipleTouchEnabled = YES 在某些情况下也可能有助于解决事件传递问题。如果您只想让您的按钮响应事件,请在您的按钮上设置exclusiveTouch = YES UIButton 可以同时处于UIControlStateHighlightedUIControlStateSelected 状态吗?如果您暂时删除该行代码会怎样?

以上是关于UIButton 的不同状态不起作用的主要内容,如果未能解决你的问题,请参考以下文章

.normal 选项在 UIButton 的状态 OptionSet 中不起作用(Swift 3)

在UIButton上覆盖'isSelected'或'isEnabled'不起作用

iOS - UIPageControl 上的 UIButton 不起作用

iOS UIButton、setEnabled 和 button.hidden 不起作用

UIButton 操作在一段时间后不起作用(可能在一些垃圾收集之后)

为啥我的 UIButton 不起作用?