49

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

我将如何实现这一目标?

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

谢谢你的帮助

4

6 回答 6

106

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

self.clearsSelectionOnViewWillAppear = YES;

否则viewWillAppear只是打电话

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)
}
于 2013-02-19T11:56:53.540 回答
21

斯威夫特 3.0

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

    if let selectionIndexPath = self.tableView.indexPathForSelectedRow {
        self.tableView.deselectRow(at: selectionIndexPath, animated: animated)
    }
}
于 2016-10-13T07:15:46.387 回答
7

尝试

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Deselect the row which was tapped
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}
于 2013-02-19T11:56:13.250 回答
6

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

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

于 2013-02-19T12:46:06.243 回答
4

迅速 3

func clearOnAppearance() {
    for indexPath in tableView.indexPathsForSelectedRows ?? [] {
        tableView.deselectRow(at: indexPath, animated: true)
    }
}
于 2017-06-20T14:18:10.480 回答
1

或者一些不雅的方式=)

NSArray *arrayWithPaths = [tableView indexPathsForVisibleRows];
for (NSIndexPath *path in arrayWithPaths)
{
    [tableview deselectRowAtIndexPath:path animated:NO];
}
于 2013-02-19T11:57:12.703 回答