4

ビューが読み込まれるときにUITableViewのすべてのセルを読み込んで、スクロールしているときに読み込まれないようにすることはできますか?(これを実行している間、ロード画面を表示します)

どうか、それが私のプロジェクトでの唯一の方法です(理由を説明するには複雑すぎて申し訳ありません^^)

編集:

さて、私があなたに説明させてください、私がしていることは間違いありません:

- (UITableViewCell *)tableView:(UITableView *)tableView
     cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   NSString *cellIdentifier = [NSString stringWithFormat:@"Identifier %i/%i", indexPath.row, indexPath.section];
   CustomTableCell *cell = (CustomTableCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
   NSDictionary *currentReading;

   if (cell == nil)
   {
       cell = [[[CustomTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease];

       UILabel *label;
       UIView *separator;

       if(indexPath.row == 0)
       {
           // Here I'm creating the title bar of my "table" for each section
       }
       else
       {
           int iPr = 1;

           do
           {
               currentReading = [listData objectAtIndex:iPr-1];
               iPr++;
           } while (![[currentReading valueForKey:@"DeviceNo"] isEqualToString:[devicesArr objectAtIndex:indexPath.section]] || 
                      [readingresultsArr containsObject:[currentReading valueForKey:@"ReadingResultId"]]);

           [readingresultsArr addObject:[currentReading valueForKey:@"ReadingResultId"]];
           //
           // ...
           //
       }
    }
    return cell;
}

私のエラーはdo-while-loopで発生します:「listData」は複数の辞書を含む配列です。私の問題は、テーブルをゆっくりと下にスクロールしているときはすべて問題ないということですが、ビューの最後まですばやくスクロールしてから中央までスクロールすると、iPrが外れているというエラーが表示されます配列の範囲。したがって、問題は、最初のセクションの最後の行がすでに「readingresultsArr」に追加されているが、ロードされていないか、再度ロードしたいということです。これが、すべてのセルを一度にロードしたい理由です。

4

4 に答える 4

11

次のコマンドを呼び出すだけで、すべてのセルを事前に割り当てることができます。

[self tableView: self.tableView cellForRowAtIndexPath: indexPath];

テーブルのすべての行に対して。上記の行を適切なforループに入れ、このコードをで実行しますviewDidAppear

ただし、問題は、tableViewがこれらのセルのすべてを保持しないことです。不要な場合は破棄します。

にを追加し、で作成されたすべてのセルをキャッシュすることで、この問題を回避できNSMutableArrayます。テーブルの存続期間中に動的な更新(挿入/削除)がある場合は、キャッシュ配列も更新する必要があります。UIViewControllercellForRowAtIndexPath

于 2012-09-04T23:06:01.447 に答える
9

uiscrollviewにuitableviewを配置します

たとえば、完全なリストuitableviewの高さは1000であると予想します

次に、uiscrollviewのcontentsizeを320X1000に設定し、uitableviewの高さを1000に設定します

次に、すべてのセルがコンテンツをロードし、画面に表示されなくても

于 2013-05-28T02:17:05.070 に答える
3

私の場合、セルの高さにautomaticDimensionを使用し、estimatedRowHeightを小さくしたため、tableviewがすべてのセルをロードしました。

于 2019-02-19T11:53:01.743 に答える
0

juancazallaによるコメントに続いて、automaticDimensionを使用しているtableViewがある場合、estimatedRowHeightを低い値(1など)に設定すると、すべてのセルを一度にロードするのが最適であることがわかりました。

于 2020-04-19T01:20:06.377 に答える