21

ストーリーボードにセルを含むUITableViewがあり、セルを別のビューに接続するセグエがあります。

セルを選択すると、セル選択アニメーションが表示され(私の場合はセルが灰色になります)、もう一方のビューが画面に表示されます。ただし、テーブルビューに戻ると、選択解除アニメーションはまったく表示されません(選択アニメーションの逆)。私はセグエを使用しているだけなので、デフォルトでこれが処理されることを期待していました。

選択解除アニメーションを表示するように強制する方法はありますか?

4

6 に答える 6

26

ビューコントローラがのサブクラスでUITableViewControllerあり、(デフォルト値)clearsSelectedOnViewWillAppearに設定されている場合、これは自動的に処理されます。YES

あなたの場合、これはそれとまったく同じ方法で行うことができますUITableViewController。で選択した行の選択を解除し-viewWillAppear:ます。

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    NSIndexPath *selectedIndexPath = [self.tableView indexPathForSelectedRow];
    [self.tableView deselectRowAtIndexPath:selectedIndexPath animated:YES];
}
于 2011-12-16T07:52:05.507 に答える
11

およびメソッドのsuper実装を呼び出していることを確認してくださいviewWill...viewDid...

于 2011-12-27T04:00:13.113 に答える
11

セグエの使用についてはよくわかりませんが、ViewControllerが表示されたときにデータを更新したいことがよくあります。ただし、テーブルをリロードすると、選択した行がクリアされます。これは、選択した行を維持し、戻ったときに選択解除アニメーションを表示するために使用するコードです。これがあなたを助けるかもしれないという場合があるので、私はそれをここに投稿します。

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    NSIndexPath *indexPath = [tableView indexPathForSelectedRow];
    [tableView reloadData];
    if(indexPath) {
        [tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
    }
}

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    NSIndexPath *indexPath = [tableView indexPathForSelectedRow];
    if(indexPath) {
        [tableView deselectRowAtIndexPath:indexPath animated:YES];  
    }
}
于 2011-12-28T08:30:33.320 に答える
5

Swift3の場合

override func viewWillAppear(_ animated: Bool) {

    super.viewWillAppear(animated)
    if let path = tableView.indexPathForSelectedRow {

        tableView.deselectRow(at: path, animated: true)
    }
}
于 2017-05-18T03:33:43.523 に答える
1

スウィフトアップデート:-

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(true)
    if tableView.indexPathForSelectedRow != nil {
        let indexPath: NSIndexPath = tableView.indexPathForSelectedRow!
        tableView.deselectRowAtIndexPath(indexPath, animated: true)
    }
}
于 2015-10-12T09:27:30.593 に答える
1

より良いSwiftアップデート:

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

    if let path = tableView.indexPathForSelectedRow {

        tableView.deselectRowAtIndexPath(path, animated: true)
    }
}
于 2016-02-02T19:35:41.897 に答える