UIButton的不同状态不起作用

时间:2011-06-01 15:35:19

标签: iphone objective-c ios uitableview uibutton

我已编写此代码以查看不同的图像状态...

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。

P.S。我已在表格视图单元格中添加了这些图像

3 个答案:

答案 0 :(得分:2)

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

尝试使用|代替+进行第四次setImage来电。

答案 1 :(得分:2)

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

尝试删除这行代码,按钮就可以使用

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

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

[cell.contentView addSubview:btnComment]

答案 2 :(得分:0)

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

[cell addSubview:btnComment];

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

[cell.contentView addSubview:btnComment];

但我也不确定这可能会导致你的问题......