昨日の記事で、UIViewControllerのviewWillAppearメソッドをオーバーライドし、そこで、違うセルをハイライト表示しようとすると、なぜかiPhoneが固まってしまう現象がみられました。
で、やっとこさ、謎が解けました。
原因がわかったのは、下のサイトを読んで、使っているメソッドが違うことに気づいたからです。
- (void)viewWillAppear:(BOOL)animated {
via:UITableViewに戻った時に確実に行のハイライト解除アニメーションを表示する
[self.tableView reloadData];
if (detailViewController.data) {
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[datas indexOfObject:detailViewController.data] inSection:0];
[self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
}
[super viewWillAppear:animated];
}
このプログラムの中で、NSIndexPathを設定しているメソッドが、indexPathWithIndexではなく、indexPathForRow:inSectionなんですね。
確かに、セクションを設定しないと、indexだけ指定しても、どこのセクションのindexだよってiPhone側は困ってしまいますからね。
案の定、このメソッドに切り替えたらうまくいきました。
やっと、先に進むことができます。
ちなみに、昨日の記事で、viewWillAppearをオーバーライドすると、ハイライト表示が自動的に解除されてしまうと書きましたが、正確には、[super viewWillAppear:animated]を呼び出さないと解除されないみたいです。
若干違っていました。。。
そのことは、こちらの記事からわかりました。
UITableViewのハイライトについてまとめてみた。
0 コメント:
コメントを投稿