Fabio の答えはうまく機能しますが、ユーザーが少しだけスワイプして気が変わった場合、適切な外観にはなりません。そのケースを正しく取得するには、選択したインデックス パスを保存し、必要に応じてリセットする必要があります。
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
self.savedSelectedIndexPath = nil;
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
if (self.savedSelectedIndexPath) {
[self.tableView selectRowAtIndexPath:self.savedSelectedIndexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
}
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.savedSelectedIndexPath = self.tableView.indexPathForSelectedRow;
if (self.savedSelectedIndexPath) {
[self.tableView deselectRowAtIndexPath:self.savedSelectedIndexPath animated:YES];
}
}
UITableViewController を使用している場合は、組み込みのクリアを無効にしてください。
self.clearsSelectionOnViewWillAppear = NO;
そして、savedSelectedIndexPath のプロパティを追加します。
@property(strong, nonatomic) NSIndexPath *savedSelectedIndexPath;
いくつかの異なるクラスでこれを行う必要がある場合は、たとえば、この要点で行ったように、ヘルパーで分割するのが理にかなっています: https://gist.github.com/rhult/46ee6c4e8a862a8e66d4