これは本当に私を狂っています。新しい行をスクロールして挿入した後の奇妙なUITableViewの動作
ソートされた顧客リストを表示するテーブルビューがあります。ユーザーは新しい顧客を追加することができるので、テーブルビューに新しい行を追加する必要があります(データモデルを更新してinsertRowsAtIndexPaths:withRowAnimation:
を呼び出す)。ただし、テーブルビューがソートされているため、この挿入は画面外で発生する可能性があります。これはあまりうまくいきません。ユーザー体験。だから私の考えは、インサートが実際に行を挿入する前に発生しますインデックスパスにテーブルビューをスクロールすることでした:
- (void)finishedSavingNewCustomer:(Customer*)customer atIndex:(NSInteger)index {
// NOTE: self.customers (which is the model for the table view used in all datasource
// methods) has already been updated at this point, ie. it already contains the new customer
// scroll the table view so that the insert position is on-screen
NSInteger scrollRow = (index < ([self.customers count] - 1) ? index : [self.customers count] - 2);
NSIndexPath* scrollIndexPath = [NSIndexPath indexPathForRow:scrollRow inSection:0];
[self.tableView scrollToRowAtIndexPath:scrollIndexPath atScrollPosition:UITableViewScrollPositionNone animated:NO];
// insert the new row
NSArray* indexPaths = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:index inSection:0]];
[self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade];
}
このコードは、実際に期待通りに動作します:テーブルビューをスクロールして、新しい行が正しく挿入されています。
ただし、挿入後、一部のテーブルビューセルは「無応答」になりますスワイプ時に削除ボタンが表示されず、選択されてもハイライト表示されません。これは本当に奇妙で、ちょっと説明が難しいので、私はそれを説明しようとしましょう。
初期状況:行は1から5までが表示されます。
--------- screen top --------
Row 1
Row 2
Row 3
Row 4
Row 5
------- screen bottom -------
Row 6
Row 7
Row 8
Row 9
状況をスクロールし、挿入後:
Row 1
Row 2
Row 3
Row 4
Row 5
--------- screen top --------
Row 6
Row 7
Row 7a << newly inserted
Row 8
Row 9
------- screen bottom -------
さて、挿入行の後に1から5までのようにユーザーとの対話に応答しません上述した。
誰もこの種の問題を経験しましたか?アイデア?新しい行の挿入がユーザーに表示されるようにするための他の方法はありますか?
更新:ただ、デバイス上でテストされ、そしてそれは、この問題がシミュレータ上で発生することが判明!これにより問題はあまり不快になりますが、他の誰かがこの行動を経験した場合でも私はまだ興味があります。
あなたの2つの提案は私にとってはうまくいかなかったが、間違いなくシミュレータのバグです。テーブルビューを再読み込みするだけでも役立ちません!とにかく、あなたの経験を共有してくれてありがとう。 –
いつでも。バグレポートを提出することができます:https://bugreport.apple.com/ – Tim