4

100個のセルがあるテーブルビューがあります。最初は空です。次に、私は呼び出します:

[_tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationLeft];

テーブルビューには何も表示されなかったため、いくつかのセルを作成する必要があります。ただし、テーブルビューで(画面サイズに合わせて)10個のセルが要求されることを期待していました... 100個ではありません!

アニメーションなしでテーブルビューをリロードするだけでは発生しません。

[_tableView reloadData];

この問題により、テーブルの再読み込みが非常に遅くなります。10個のセルのみを要求するようにする方法はありますか?


編集

たぶん私は十分に明確ではありませんでした:最初は、テーブルにエントリがありません次に、データソースに100個のエントリを追加し、テーブルにリロードするように依頼します。リロード前に表示されているセルがないため、reloadRowsAtIndexPathsソリューションは機能しません。

4

4 に答える 4

2

リロードするのではなく、テーブルに新しい行を挿入しているように思われるので、次を使用してみませんか。

[_tableView insertRowsAtIndexPaths:... withRowAnimation:...];

最初にセクションを挿入する必要がある場合があります。

[_tableView insertSections:... withRowAnimation:..];

http://developer.apple.com/library/ios/ipad/#documentation/uikit/reference/UITableView_Class/Reference/Reference.html

于 2012-09-30T10:02:47.667 に答える
0

この問題はiOS5.1以下でのみ発生することがわかりました。iOS 6で修正されているので、バグを報告する必要はありません。とにかく答えてくれてありがとう!

于 2012-09-30T23:07:54.750 に答える
0

たとえば10個のセルだけをリロードしたい場合は、次のコードが機能します。

        int cellsToReload = 10;

        NSMutableArray *indexPaths = [NSMutableArray arrayWithCapacity:cellsToReload];
        for(int x = 0; x < cellsToReload; x++) {

            NSIndexPath *indexPath = [NSIndexPath indexPathForRow:x inSection:0];
            [indexPaths addObject:indexPath];
        }

        [self.theTableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationLeft];

上記のコードでは、すべてのテーブルビューをリロードしたときに、一部の行だけでなくセクション全体をリロードしていました。あなたのテーブルビューには1つのセクションしかなかったと思います。

于 2012-09-29T23:59:46.723 に答える
0

NSArray *paths = [_tableView indexPathsForVisibleRows];
[_tableView reloadRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationLeft];
必要なことを正確に実行します-表示されているrawのみをリロードし、それ以上でもそれ以下でもリロードしません。

于 2012-09-30T00:17:49.637 に答える