2009/10/11

[Objective-C][iPhone sdk]ハイライト表示時にiPhoneが固まってしまった現象について

昨日の記事で、UIViewControllerのviewWillAppearメソッドをオーバーライドし、そこで、違うセルをハイライト表示しようとすると、なぜかiPhoneが固まってしまう現象がみられました。

で、やっとこさ、謎が解けました。

原因がわかったのは、下のサイトを読んで、使っているメソッドが違うことに気づいたからです。

- (void)viewWillAppear:(BOOL)animated {
[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];
}

via:UITableViewに戻った時に確実に行のハイライト解除アニメーションを表示する

このプログラムの中で、NSIndexPathを設定しているメソッドが、indexPathWithIndexではなく、indexPathForRow:inSectionなんですね。

確かに、セクションを設定しないと、indexだけ指定しても、どこのセクションのindexだよってiPhone側は困ってしまいますからね。

案の定、このメソッドに切り替えたらうまくいきました。

やっと、先に進むことができます。

ちなみに、昨日の記事で、viewWillAppearをオーバーライドすると、ハイライト表示が自動的に解除されてしまうと書きましたが、正確には、[super viewWillAppear:animated]を呼び出さないと解除されないみたいです。

若干違っていました。。。

そのことは、こちらの記事からわかりました。
UITableViewのハイライトについてまとめてみた。

0 コメント:

コメントを投稿