0

余分な人口がある場合、私tableViewの巻物は遅れます。最大20個のセルが適切ですが、それを超えると、スクロール中に遅れが始まります。より良いスクロール結果をもたらす実装を提案してください。これが私がそれをした方法です:

UITableViewCellカスタムクラスを定義しました。

セルには4つのラベルがあり、imageView(各アウトレットは合成されたプロパティです): ここに画像の説明を入力してください

にを配置し、tableView次のviewControllerように入力しました。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"CustomCell";

    MyCustomCell *cell = (MyCustomCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"MyCustomCell" owner:self options:nil];
        for (id currentObject in topLevelObjects)
            if ([currentObject isKindOfClass:[UITableViewCell class]]){
                cell =  (MyCustomCell *) currentObject;
                break;
            }
    }
    [cell.label_descr setText:@"bla-bla-bla"];
    [cell.label_date setText:@"bla-bla-bla"];
    [cell.label_time setText:@"bla-bla-bla"];
    [cell.label_numeric setText:@"bla-bla-bla"];
    [cell.image_view setImage:[UIImage imageWithContentsOfFile:@"bla-bla-bla"]];

    return cell;
}

ご覧のとおり、各セルのテキストの量は悲惨であり、に使用される画像UIImageViewは約25x25.pngファイルです。

tableViewは300個以上のセルを保持することになっています(私を責めないでください、私には「地獄からの顧客」がいます)。

tableView(多くの)遅れなしに、スクロールをよりスムーズにする方法を提案してください。または、それらの「300セルを超える」を私の「地獄から」の顧客に提示する別の方法。

よろしくお願いします!

PS:重複している場合は申し訳ありませんが、見つかった解決策はまったく役に立ちませんでした。

編集:

imageViewに使用される画像について:

私は2つの異なる画像のみを使用します:

  1. 「チェックマーク」-トランザクションが完了しました
  2. および「保留中」-処理中のトランザクション

たぶん、tableViewCell xibで2つのimageViewアウトレットを定義し、必要な画像を毎回設定するのではなく、必要なimageViewを選択するために使用しますか?

解決策が見つかりました。皆さん、特にiNoobとmax_に感謝します

  1. tableViewCellのxibで、imageViewのデフォルト画像として「checkMark」を設定しました。
  2. セルの値を定義するとき、cellForRowAtIndexPath必要な場合にのみ、次のように言います。

    if_I_should_present_a_pending_image:

       [cell setPending];
    

「checkMark」を「保留中の」画像(tableViewCellクラスで定義されたメソッド)に置き換えるには:

- (void)setPending{
    self.image_view.animationImages = [NSArray arrayWithObjects:    
                                    [UIImage imageNamed:@"pending_1.png"],
                                    [UIImage imageNamed:@"pending_2.png"],
                                    [UIImage imageNamed:@"pending_3.png"],
                                    [UIImage imageNamed:@"pending_4.png"],
                                    nil];
    self.image_view.animationDuration = 2.0;
    self.image_view.animationRepeatCount = 0;
    [self.image_view startAnimating];
}

l

その後、テーブルは魅力のようにスクロールします。皆さん、ありがとうございました。乾杯。

4

3 に答える 3

1
  1. すべてのサブビューを繰り返さないでください。cell = [topLevelObjects objectAtIndex:0];
  2. gcdを使用してバックグラウンドで画像をロードし、簡単にアクセスできるようにNSDictionaryに保存します。

擬似コード:

If caches dict contains an object for the URL you want to load
    Retrieve that image from the dict
    Set it as the image
Else
    Load the image using dispatch_async()
    Add it to the dict
于 2012-08-03T12:50:08.497 に答える
0

この記事では、nibファイルを使用する代わりにプログラムでセルを作成すると、最大5〜10%高速になる可能性があることを示唆しています。それが本当かどうかはわかりませんので、一粒の塩と一緒に飲んでください。でも試してみる価値があるかもしれません。

于 2012-08-03T12:51:45.063 に答える
0

コードを次のコードに置き換えて試してください。

以下のコードの場合:

1)コントローラーでUITableViewCellのIBOutletを取得します。以下のコードの場合はmyCustomTableViewCellです。

 MyCustomCell *customCell = (MyCustomCell *)[tableView dequeueReusableCellWithIdentifier:@"MyCustomCell"];
 if(customCell == nil) {
     [[NSBundle mainBundle] loadNibNamed:@"MyCustomCell" owner:self options:nil];
     customCell = myCustomTableViewCell;
  }

それがうまくいくことを願っています。

于 2012-08-03T12:52:24.813 に答える