2011-07-13 14 views
15

私はUISearchBarとUITableViewを管理するUIViewControllerを持っています。私は、複数のUIViewControllerがアプリケーションの一部を管理することをAppleが断念していることを読んだので、UITableViewを使用してUITableViewを管理していませんでした。代わりに、自分のUIViewControllerにUITableViewDelegateUITableViewDataSourceというプロトコルを実装しました。UITableViewControllerを使用しないときにclearsSelectionOnViewWillAppearを変更するにはどうすればよいですか?

私の質問は、もはやUITableViewControllerを使用していないため、実際にclearsSelectionOnViewWillAppearの動作をどのように変更するのですか?このプロパティはUITableViewControllerの一部です。単にあなたのviewWillAppear:方法で

[myTableView deselectRowAtIndexPath:[myTableView indexPathForSelectedRow] animated:YES]; 

を呼び出すことによって

答えて

40

+1

さて、私はあなたのポイントを参照してください。だから本質的に、私は手動で自分自身の動作を複製する必要があります。これはちょっと荒いです。特に、達成するのが難しいUITableViewControllerが提供するものが他にもあるとします。 – pixelfreak

+0

これを私のdidSelectRowAtIndexPathに入れて、行の選択を解除しました。 'tableView.deselectRowAtIndexPath(indexPath、animated:true)' – Robert

4

viewWillAppear:animatedメソッドをオーバーライドし、[super viewWillAppear:animated]コールが欠落している可能性があります。

4

ここスウィフトコード:デフォルト

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 
    if let indexPath = tableView.indexPathForSelectedRow() { 
     tableView.deselectRowAtIndexPath(indexPath, animated: true) 
    } 
} 
-2

、選択された行は、コントローラに戻る上で選択したままです。 viewWillAppearの行の選択を解除するコマンドを追加すると、画面に戻るときに行が選択されないことを確認できます。

はここで私のために働いスウィフト3.2コードです:

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
    if let indexPath = myTable.indexPathForSelectedRow { 
     myTable.deselectRow(at: indexPath, animated: true) 
    } 
} 
+0

なぜそれが動作するかについて、より詳細を追加すると良いでしょう。 – gdbj

+0

@gdbj投稿を編集しました。ご不明な点がありましたらお知らせください。 – bb90

+1

ダーコの答えはどうですか? – gdbj

関連する問題