2009-07-12 1 views
3

これは本当に私を狂っています。新しい行をスクロールして挿入した後の奇妙な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までのようにユーザーとの対話に応答しません上述した。

誰もこの種の問題を経験しましたか?アイデア?新しい行の挿入がユーザーに表示されるようにするための他の方法はありますか?


更新:ただ、デバイス上でテストされ、そしてそれは、この問題がシミュレータ上で発生することが判明!これにより問題はあまり不快になりますが、他の誰かがこの行動を経験した場合でも私はまだ興味があります。

答えて

1

私は最近、Simulatorでいくつかの同様の経験をしました。私はコアデータからいくつかのテーブルビューを駆動するアプリケーションを扱っています。また、UIAlertViewsとUIActionSheetsをアプリケーションを通してさまざまな時点で表示します。

UIアクション(表のセル挿入、アクションシートの表示など)が発生した直後に、シミュレータがタッチイベントにうまく反応しないことに気付きました。これは、通常、バックシミュレータや

  • クリックにし、別のウィンドウに

    • スイッチのいずれかに私のために役立ち、シミュレータのいくつかのタッチ非アクティブエリアをマウスをドラッグし、その後、
    • 再び私が望む行動をしてみてください

    あなたのマイルは異なる場合があります。テスト中に痛みを感じるかもしれませんが、すべてがデバイス上で正常に機能している限り、正常であるはずです。

  • +0

    あなたの2つの提案は私にとってはうまくいかなかったが、間違いなくシミュレータのバグです。テーブルビューを再読み込みするだけでも役立ちません!とにかく、あなたの経験を共有してくれてありがとう。 –

    +0

    いつでも。バグレポートを提出することができます:https://bugreport.apple.com/ – Tim

    関連する問題