1

我正在尝试创建模仿按钮的 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];
}
4

1 回答 1

0

我想我真的不明白你问的问题。UITableViewCell在突出显示的意义上按下时已经“像一个按钮”。从您的代码的外观来看,它确实没有做任何 tableView 本身不做的事情。

基本上,您看到延迟的原因是因为单元格已经在触摸时突出显示,而您正在做的是将Selected设置为 YES,然后是 NO,但单元格已经这样做了,所以它有点做同样的事情两次,一次它自己,然后一旦被迫 - 这就是你看到的延迟的原因。

唯一应该输入的didSelectRowAtIndexPath:是您希望在按下按钮时发生的操作,而不是您希望单元格执行的操作或它在被触摸时的行为方式。还有其他委托方法可以处理这些行为。

如果您想更改单元格的突出显示颜色,请在此处查看我的问题/答案

更新

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

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    /* The following will deselect the cell on touchUp */
    [tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:YES];
}
于 2012-05-04T23:51:37.057 回答