2

UITableView 内のすべてのセルの配列を取得する必要があります。私は現在、以下の方法を使用しています。

-(NSArray *)allTableViewCellsArray
{
    NSMutableArray *cells = [[NSMutableArray alloc] init];

    for (NSInteger j = 0; j < [tableView numberOfSections]; ++j)
    {
        for (NSInteger i = 0; i < [tableView numberOfRowsInSection:j]; ++i)
        {
            [cells addObject:[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:j]]];
        }
    }

    return cells;
}

私はそれである程度成功しましたが、セルが表示されていないときにクラッシュすることがわかりました。では、表示されているかどうかに関係なく、UITableView 内のすべてのセルの配列を取得するにはどうすればよいでしょうか?

4

3 に答える 3

7

実装で表のセルを再利用していますか? もしそうなら、UITableViewのセル再利用ロジックのために、UITableViewからすべてのUITableViewCellオブジェクトを取得できないと思います。

したがって、コードでセルの再利用メカニズムを「無効にする」必要があります。これは、テーブル ビュー データ ソース デリゲートのメソッドdequeueReusableCellWithIdentifier内のセルをデキューしない (つまり、メソッドをもう使用しない) ことと、セルの init メソッド ( ) のプロパティに nil を渡すことによって実現できます。cellForRowAtIndexPathreuseIdentifierinitWithStyle:reuseIdentifier:

その後、あなたのallTableViewCellsArray方法はおそらくうまくいくでしょう!しかし、これを達成するのはまだ運が悪いと思います。

のAppleドキュメントから[tableView cellForRowAtIndexPath:]

Return Value

An object representing a cell of the table or nil if the cell is not visible or indexPath is out of range.
于 2012-12-04T09:44:17.060 に答える
3

解決策を見つけました。選択した任意の時点ですべてのセルを取得するのではなく、機能しないためです。作成時にすべてのセルの配列を作成します。これにより、すべてのセルが繰り返され、すべてのセルを配列に追加できるようになります。

私はwillDisplayCellメソッドでこれを行います。

于 2012-12-04T10:26:40.050 に答える
-2
for (UIView *view in TableView.subviews) {
    for (tableviewCell *cell in view.subviews) {
       //do
    }
}
于 2013-11-26T08:49:50.910 に答える