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
可以同时处于UIControlStateHighlighted
和UIControlStateSelected
状态吗?如果您暂时删除该行代码会怎样?以上是关于UIButton 的不同状态不起作用的主要内容,如果未能解决你的问题,请参考以下文章
.normal 选项在 UIButton 的状态 OptionSet 中不起作用(Swift 3)
在UIButton上覆盖'isSelected'或'isEnabled'不起作用
iOS - UIPageControl 上的 UIButton 不起作用
iOS UIButton、setEnabled 和 button.hidden 不起作用