选择UITableViewCell时,UIButton会被覆盖

时间:2012-01-16 07:30:31

标签: ios user-interface uitableview

我在UITableViewCell中使用了UIButton,可以选择此按钮,金星和未选中的灰星,如下图所示。

enter image description here

问题在于,当选择单元格时,无论是否选择了按钮,它都将变为灰色(此灰色与未选择的恒星模式的灰色不同)。我一直想弄清楚为什么会这样,但没有运气。

enter image description here

这是单元格的实现,

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];    
UIButton *button = [[UIButton buttonWithType:UIButtonTypeCustom]retain];

//set the background of the cells
cell.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed: @"cellBackground.png"]];
cell.selectedBackgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"cellselected2.png"]];

// set the button content
[button setImage:[UIImage imageNamed:@"star.png" ] forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"starSelected.png"] forState:UIControlStateSelected];
[button addTarget:self action:@selector(selectedButton:) forControlEvents:UIControlEventTouchUpInside];
[button setFrame:CGRectMake(280, 10,  24, 24)];

[cell addSubview:button];

return cell;
}

当我在选择单元格时点击按钮时,按钮将完全消失!

谢谢,

3 个答案:

答案 0 :(得分:6)

我想出了问题所在。问题是,当选择单元格时,单元格中的UIButton将进入“突出显示状态”。如果没有指定用于按钮突出显示按钮状态的图像,它将看起来与我的情况相同。

所以我只是通过添加我希望在UIButton突出显示状态下使用的图像来修复它,

[button setImage:[UIImage imageNamed:@"starSelected.png"] forState:UIControlStateHighlighted];

希望这可以帮助其他面临同样问题的人:)

答案 1 :(得分:1)

您正在将按钮添加到单元格框架而不是它的contentView。

UITableViewCell仅在选择单元格时才将此属性的值添加为子视图。它将选定的背景视图添加为背景视图(backgroundView)正上方的子视图(如果它不是nil),或者在所有其他视图后面。 当UITableViewCell将背景视图添加为所有其他视图后面的子视图并使用其当前帧位置时。

替换

[cell addSubview:favButton];

[cell.contentView addSubview:favButton];

那应该解决它。

UITableViewCell对象的内容视图是单元格显示的内容的默认超级视图。如果您想通过简单地添加其他视图来自定义单元格,则应将它们添加到内容视图中,以便在单元格进入和退出编辑模式时将它们正确定位。

这一切都在AppleDocs ^^

参考:http://developer.apple.com/library/IOs/#documentation/UIKit/Reference/UITableViewCell_Class/Reference/Reference.html

答案 2 :(得分:1)

您当然可以为突出显示的状态设置图像。另一种选择,如果你想为UIControlStateNormalUIControlStateHighlighted使用相同的图像,你也可以这样说 button.adjustsImageWhenHighlighted = NO,默认为YES