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

Swift 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 に答える