为什么UITableViewCell会保持突出显示?

4th*_*ace 141 cocoa-touch uitableview ios

什么会导致表格视图单元格被触摸后保持高亮显示?我点击单元格,可以看到它在按下详细视图时保持高亮显示.弹出详细信息视图后,单元格仍会突出显示.

pau*_*erd 256

didSelectRowAtIndexPath你需要打电话deselectRowAtIndexPath取消选择单元格.

所以无论你在做什么,didSelectRowAtIndexPath你只需要打电话deselectRowAtIndexPath.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
 // Do some stuff when the row is selected
 [tableView deselectRowAtIndexPath:indexPath animated:YES];
}
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢在viewDidAppear中调用`deselectRowAtIndexPath`,如果选择该行会显示一个新视图. (10认同)
  • @Kendall,@ 4thSpace:也许我最后的评论让我感到困惑,对此我表示道歉.UITableViewController从`-viewDidAppear`调用其tableView属性上的`-deselectRowAtIndexPath:animated:`方法.但是,如果你在UIViewController子类中有一个表视图,你应该自己从`-viewDidAppear`调用`-deselectRowAtIndexPath:animated:`.:) (6认同)
  • 实际上这不是正确的地方,真的...尝试使用带有桌子的Apple应用程序(联系人是一个很好的),你会看到你推出到一个新的屏幕后,返回时仍然突出显示单元格在取消选择之前暂时 从理论上讲,我认为你不需要做任何额外的工作就可以让它自己取消选择,所以不应该需要viewDidAppear中的代码...... (5认同)
  • 在我的UITableViewController的子类中,它实际上是`-viewWillAppear:`的重写,打破了它.添加对`[super viewWillAppear:animated]`的调用让它再次运行. (5认同)
  • 从3.2开始,如果你的`UITableViewController`的`clearsSelectionOnViewWillAppear`属性被设置为`YES`(这是默认值),你就会发生自动取消选择行为,并且你没有阻止调用`[super viewWillAppear]`. (5认同)

Dan*_*ail 59

最干净的方法是在viewWillAppear上:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    // Unselect the selected row if any
    NSIndexPath*    selection = [self.tableView indexPathForSelectedRow];
    if (selection) {
        [self.tableView deselectRowAtIndexPath:selection animated:YES];
    }
}
Run Code Online (Sandbox Code Playgroud)

这样,当你返回到控制器时,你就有了淡出选择的动画.

取自http://forums.macrumors.com/showthread.php?t=577677

Swift版本

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    // deselect the selected row if any
    let selectedRow: IndexPath? = tableView.indexPathForSelectedRow
    if let selectedRowNotNill = selectedRow {
        tableView.deselectRow(at: selectedRowNotNill, animated: true)
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我想知道人们现在在做什么,iOS 7允许用户"拖回".部分拖动但未完成操作将触发viewWillAppear.当用户返回真实时,将不会选择该行. (3认同)

Han*_*ers 20

你是否是子类-(void)viewWillAppear:(BOOL)animated?如果不调用[super viewWillAppear:animated];自定义方法,则不会取消选择所选的UITableViewCell .


Rut*_*ans 19

对于Swift用户,请将其添加到您的代码中:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    tableView.deselectRowAtIndexPath(indexPath, animated: true)
}
Run Code Online (Sandbox Code Playgroud)

除了Swift而不是Obj-C之外,这是paulthenerd的答案.


Osc*_*car 9

Swift 3解决方案

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
      tableView.deselectRow(at: indexPath as IndexPath, animated: true)
}
Run Code Online (Sandbox Code Playgroud)


Sha*_*anu 7

如果您使用的是UITableViewCell,请注释以下行

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{

 // [super setSelected:selected animated:animated];

}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.