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

时间:2013-02-19 11:52:47

标签: iphone ios objective-c uitableview

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

我将如何实现这一目标?

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

感谢您的帮助

6 个答案:

答案 0 :(得分:90)

如果您使用UITableViewController子类,则只需设置属性

self.clearsSelectionOnViewWillAppear = YES;

否则在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)
}

答案 1 :(得分:17)

Swift 3.0

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

    if let selectionIndexPath = self.tableView.indexPathForSelectedRow {
        self.tableView.deselectRow(at: selectionIndexPath, animated: animated)
    }
}

答案 2 :(得分:6)

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

答案 3 :(得分:6)

我决定将此作为答案而不是评论。

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

答案 4 :(得分:4)

swift 3

func clearOnAppearance() {
    for indexPath in tableView.indexPathsForSelectedRows ?? [] {
        tableView.deselectRow(at: indexPath, animated: true)
    }
}

答案 5 :(得分:0)

或者一些不优雅的方式=)

NSArray *arrayWithPaths = [tableView indexPathsForVisibleRows];
for (NSIndexPath *path in arrayWithPaths)
{
    [tableview deselectRowAtIndexPath:path animated:NO];
}