0

コンテキスト: カスタム セルを含むテーブルビューがあります。各セルには、リソースをダウンロードするためのボタンがあります。ボタンを押すと、テーブルビューの他のすべてのボタンが無効になります。

したがって、私の問題は、遅延読み込みであるため、テーブルビューのすべての行への参照を取得できないことです。そのため、他の行にアクセスしようとすると、ボタンを無効にし始めた時点で追加するオブジェクトがないため、失敗します。

私の問題をより啓発するかもしれないコードは次のとおりです。

NSMutableArray *cells = [NSMutableArray array];
for (NSInteger i = 0; i < [mainTableView numberOfRowsInSection:1]; ++i) {
    WSVideoLibraryTableCell *addedCell = (WSVideoLibraryTableCell *)[mainTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:1]];
    NSLog(@"CELL ADDED: %@", addedCell);
    [cells addObject:addedCell];
}
if (stateEnabled) {
    for (WSVideoLibraryTableCell *cell in cells) {
        [[cell downloadButton] setEnabled:YES];
    }
}
else
{
    for (WSVideoLibraryTableCell *cell in cells) {
        [[cell downloadButton] setEnabled:NO];
    }
}

表示されているセルのみを取得するコードを追加してみました。NSArray *array = [mainTableView visibleCells]しかし、問題は、表示されていなかったセルでボタンが有効になり、表示されている行で奇妙なことが起こり、tableViewに何度も表示されることです(遅延読み込みと変更に関係していますか?)

コメントや提案をありがとうございました!!

4

2 に答える 2

0

私の提案は、各オブジェクトに独自のisEnabledプロパティを持たせて、オブジェクト自体を無効にし、遅延読み込みの条件を設定してそのプロパティに従ってオブジェクトを無効にすることです。

遅延読み込みは非常に役立ちます。わずかな数のセルの場合、リソースの枯渇に気付くことはありませんが、処理するセルの数を増やすと、リソースの枯渇に気付きます。

于 2013-01-07T14:41:06.207 に答える
0

これを行う最もクリーンな方法 (imo) は、UITableViewCell をサブクラス化し、そのオブジェクト (つまりボタン) にフィールドを追加し、それらすべてのオブジェクトのリストを保持してから、遅延レンダリングに実際のレンダリングを処理させることです。すべてのボタンを無効にする場合は、レンダリングされたセルに浸らずに、オブジェクトのリストを繰り返し処理して、それぞれのボタンを無効にします。

于 2013-01-07T14:41:42.150 に答える