意外的TableViewCell突出显示延迟

时间:2012-05-04 23:16:22

标签: objective-c ios uitableview

我正在尝试创建模仿按钮的TableViewCells。这意味着在触地时,应该有高光效果,并且在触摸时应该触发标准选择状态。这可以按预期工作,但问题是在触摸和突出显示的状态之间存在瞬间延迟。为什么是这样?如何在没有延迟的情况下立即突出显示突出显示?

这是我在TableView委托上使用的代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [[tableView cellForRowAtIndexPath:indexPath] setSelected:YES animated:NO];
    // do something here
    [[tableView cellForRowAtIndexPath:indexPath] setSelected:NO animated:NO];
}

1 个答案:

答案 0 :(得分:0)

我想我没有真正理解你提出的问题。 UITableViewCell在突出显示的意义上按下时,已经像“按钮”一样行动。从代码的外观来看,它实际上没有做任何tableView本身不做的事情。

基本上,您看到延迟的原因是因为单元格已经在触摸时突出显示,而您正在做的是将选择设置为YES,然后设置为NO,但是单元格已经执行此操作,因此这是两次做同样的事情,一次是自己做的,然后一次被迫 - 这就是你看到延迟的原因。

didSelectRowAtIndexPath:中唯一应该出现的是按下按钮时想要发生的动作,而不是你希望细胞做什么或触摸时它应该如何表现。还有其他委托方法可以处理这些行为。

如果您要更改单元格的突出显示颜色,请参阅我的question/answer here

更新

默认情况下,Apple提供的UITableView代码不包含取消选择方法。因此当您选择单元格时,它会保持选中状态。要取消选择单元格,请将以下方法添加到didSelectRowAtIndexPath:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    /* The following will deselect the cell on touchUp */
    [tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:YES];
}