如何在用户返回视图控制器时取消选择uitableview单元格

han*_*Dev 44 iphone objective-c uitableview ios

当用户选择它时,我会突出显示一个uitableview单元格,然后将其推送到详细视图.当它们返回到表视图视图控制器时,我希望单元格不被突出显示.

我怎么去完成这个?

[cell.textLabel setHighlighted:NO];在viewWillAppear中猜测 ,但如果把它放在那里,则单元格是未声明的.

谢谢你的帮助

iiF*_*man 92

如果你使用UITableViewController子类,那么只需设置属性

self.clearsSelectionOnViewWillAppear = YES;
Run Code Online (Sandbox Code Playgroud)

或者在viewDidAppear上调用

NSIndexPath *indexPath = self.tableView.indexPathForSelectedRow;
if (indexPath) {
    [self.tableView deselectRowAtIndexPath:indexPath animated:animated];
}

// MARK: - Swift 3
if let indexPath = tableView.indexPathForSelectedRow {
    tableView.deselectRow(at: indexPath, animated: true)
}
Run Code Online (Sandbox Code Playgroud)

  • 注意:`clearsSelectionOnViewWillAppear`大部分时间都有效.如果你在iOS7上"向后滑动"回到tableViewController,它将无法工作.第二种方法一直有效,增加了很好的动画效果. (4认同)
  • 我认为使用viewWillAppear比使用viewDidAppear更好 - 动画时序看起来与UITableViewController的作用更加一致. (4认同)
  • 在swift中你做:`if let indexPath = self.tableView.indexPathForSelectedRow {self.tableView.deselectRowAtIndexPath(indexPath,animated:animated)}` (2认同)
  • 使用 `viewWillAppear` 比使用 `viewDidAppear` 更好,效果类似于 `clearsSelectionOnViewWillAppear` (2认同)

Dus*_*ler 19

Swift 3.0

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

    if let selectionIndexPath = self.tableView.indexPathForSelectedRow {
        self.tableView.deselectRow(at: selectionIndexPath, animated: animated)
    }
}
Run Code Online (Sandbox Code Playgroud)


Gir*_*ish 7

尝试

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Deselect the row which was tapped
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}
Run Code Online (Sandbox Code Playgroud)


Ale*_*way 6

我决定把它作为答案而不是评论.

如果您正在使用故事板:单击您的UITableViewController - >选中"选择:清除外观"框