UITableViewCell 滚动时变为蓝色

Posted

技术标签:

【中文标题】UITableViewCell 滚动时变为蓝色【英文标题】:UITableViewCell turns blue when scrolling 【发布时间】:2011-04-18 05:16:22 【问题描述】:

我遇到了一个非常奇怪的错误,我不知道如何解决它:当我在 UITableView 中滚动时,它有时会突出显示一个蓝色的单元格,即使我没有完全选中。

例如: -细胞 1- -细胞 2- -细胞 3- -细胞 4- 如果我将手指放在单元格 2 上并滚动到单元格 4,它将使单元格 2 突出显示,即使 didSelectRowAtIndexPath: 从未被触发。

有什么想法吗?

编辑 添加代码:

UITableViewCell *cell = nil;
    
    static NSString *cellId = @"StyleDefault";
    cell = [tableView dequeueReusableCellWithIdentifier:cellId];
    if (cell == nil) 
        cell = [[[UITableViewCell alloc] 
                 initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId] autorelease];
    
    
    cell.textLabel.text = @"Cell One";
    cell.textLabel.textAlignment = UITextAlignmentCenter;
    [cell setAccessoryView:nil];
    
    return cell;

【问题讨论】:

能否给我们看看 cellForRowAtIndexPath 中的单元格创建代码? 请告诉我们您在CellForRowAtIndexPathdelegate 中具体做了什么? 【参考方案1】:

已修复!

我的解决方案分为两部分:

1) 在 cellForRowAtIndexPath: 中输入“cell.selected = NO;”,解决了单元格被触摸然后离开屏幕(滚动)的问题。

UITableViewCell *cell = nil;

static NSString *cellId = @"StyleDefault";
cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (cell == nil) 
    cell = [[[UITableViewCell alloc] 
             initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId] autorelease];


cell.textLabel.text = @"Cell One";
cell.textLabel.textAlignment = UITextAlignmentCenter;
[cell setAccessoryView:nil];

//Here:
cell.selected = NO;

return cell;

2) 放“[tableView deselectRowAtIndexPath:indexPath animated:YES];”进入 didSelectRowAtIndexPath: 而不是我曾经拥有的“[[tableView cellForRowAtIndexPath:indexPath] setSelected:NO];”这在很多层面上都是错误的。

[tableView deselectRowAtIndexPath:indexPath animated:YES];

希望对遇到此问题的其他人有所帮助。结案。

【讨论】:

【参考方案2】:

您可以在创建单元格时使用以下功能。

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

cell = Your allocation.

cell.selectionStyle = UITableViewCellSelectionStyleNone;

我想您还需要查看触摸的 UIViewTable 属性,即延迟内容触摸和可取消内容触摸。

希望这会有所帮助。

【讨论】:

这会在我滚动时消除选择,但不幸的是,如果用户实际选择了该行,它不会变成蓝色。【参考方案3】:

在您的 UITableView 委托中覆盖 -tableView:willSelectRowAtIndexPath:,并为所有内容返回 nil,以确保您不允许它选择行。

【讨论】:

我猜他希望单元格是可选择的。他的观点是当你滚动视图时。 这根本不允许我选择行

以上是关于UITableViewCell 滚动时变为蓝色的主要内容,如果未能解决你的问题,请参考以下文章

iOS - UIButton 在显示操作表时变为灰色,然后在关闭操作表时变为蓝色

为啥 UITextView 高度仅在滚动时变为动态?

UITableView dataSource 对象在滚动时变为空

如何使我的导航栏在滚动时变为半透明?

我想要一个粘性标题中的按钮在向下滚动时变为红色

表视图边界外的 UITableViewCell