我有一个表,我有cellForRowAtIndexPath委托给它,我在该方法中创建了UITableViewCell的实例,我将返回。在cellForRowAtIndexPath的某处,我还将UIButton添加到该单元格的cell.contentView。一切正常,直到我选择带有按钮的单元格。单元格将颜色更改为蓝色(可以),uibutton也将颜色更改为蓝色。现在,如果我点击所选单元格内的UIButton,它就会消失!哇,这很奇怪,我该如何解决?当我点击它时,我希望选定单元格内的UIButton保持不变。
编辑:包含我的cellForRowAtIndexPath实现
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *sectionsTableIdentifier = @" sectionsTableIdentifier ";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: sectionsTableIdentifier];
for (UIView *view in cell.contentView.subviews)
[view removeFromSuperview];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero
reuseIdentifier: sectionsTableIdentifier] autorelease];
}
CGRect newIconRect = CGRectMake(276, 40, 29, 29);
UIButton *newIcon = [[UIButton alloc] initWithFrame:newIconRect];
[newIcon setImage:[UIImage imageNamed:@"mynewicon.png"] forState:UIControlStateNormal];
[cell.contentView addSubview:newIcon];
[newIcon release];
return cell;
}
答案 0 :(得分:6)
我在OS 4.0 beta上发现了类似的问题,我在UITableViewCell中使用了setImage:forState:UIControlStateNormal。在选择一行并推送另一个表视图后,当我返回到表视图时,该按钮将消失。为了解决这个问题,我在图像上也设置了setImage:forState:UIControlStateHighlighted。我不确定这是否可以解决您的特定问题,但它确实适用于我。我认为在didSelectRowAtIndexPath中设置button.highlighted = NO也可能有效,但我没试过。
答案 1 :(得分:2)
按钮似乎以某种方式继承了所选状态作为其突出显示的状态。有人找到了解决方案吗?
解决方案:我对这个黑客并不是很满意,但它适用于我的目的。基本上,我希望按钮仅在选择单元格时出现。对UITableViewCell进行子类化并添加这些覆盖(editButton是在init中添加到单元格的contentView中的按钮实例)。
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
editButton.hidden = YES;
[super setSelected: selected
animated: animated];
editButton.highlighted = NO;
if (selected)
[editButton performSelector: @selector(setHidden:)
withObject: nil
afterDelay: 0.2];
}
- (void)setSelected:(BOOL)selected {
editButton.hidden = YES;
[super setSelected: selected];
editButton.highlighted = NO;
if (selected)
[editButton performSelector: @selector(setHidden:)
withObject: nil
afterDelay: 0.2];
}
答案 2 :(得分:2)
嘿,我知道这是一个老帖子,但这可能会有所帮助: UITableView将尝试在其子视图的整个层次结构中传播其选择状态。如果一个子视图响应-setHighlighted:它将根据单元格选择状态进行更新。
这解释了为什么按钮变为蓝色(突出显示),以及有时按钮图像消失的原因:UIButton包含UIImageView实例以显示其图像,并将根据其状态交换每个图像视图的图像( - [UIControl状态])。但是表格视图单元格将按钮图像视图的突出显示标志设置为YES(按钮未预见到),但此图像视图没有突出显示状态的图像,因此即使按钮保持交换,您也看不到任何内容图像根据其状态。
我使用的解决方案是,无论何时选择或突出显示单元格,我都会将按钮图像视图的突出显示标志设置为NO。
答案 3 :(得分:2)
我也遇到了麻烦(4.3以下),上面的解决方案对我不起作用。最后,设置button.adjustsImageWhenHighlighted = NO;当创建按钮时,对我来说就是一招。
答案 4 :(得分:0)
诀窍是将UIButton作为子视图添加到UIImageView上。
创建UIImage
UIImage backgroundImg = [UIImage imageName:@"yourimg"];
UIImageView imageView = [UIImageView alloc]initWithImage:backgrounding];
现在创建按钮
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
// set the frame. the position of the button is the center
CGRect newIconRect = CGRectMake(imageView.center.x, imageView.center.y, 29, 29);
button.frame = newIconRect;
最后将按钮添加到UIImageView
[imageView addSubview:button];
[cell addSubview imageView];
现在你不必玩高亮颜色。