2

UITableView を使用して、Interface Builder で作成されたカスタム セルを表示しています。テーブルのスクロールはあまりスムーズではなく (「途切れる」)、セルが再利用されていないと思います。このコードに何か問題がありますか?

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

static NSString *CellIdentifier = @"TwitterCell";
TwitterCell *cell = (TwitterCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil){
    //new cell
    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"TwitterCell" 
                                                   owner:nil options:nil];

    for(id currentObject in topLevelObjects)
    {
        if([currentObject isKindOfClass:[TwitterCell class]])
        {
            cell = (TwitterCell *)currentObject;
            break;
        }
    }

}

if([self.tweets count] > 0) {
    cell.lblUser.text = [[self.tweets objectAtIndex:[indexPath row]] username];
    cell.lblTime.text = [[self.tweets objectAtIndex:[indexPath row]] time];
    [cell.txtText setText:[[self.tweets objectAtIndex:[indexPath row]] text]];
    [[cell imgImage] setImage:[[self.tweets objectAtIndex:[indexPath row]] image]];
} else {
    cell.txtText.text = @"Loading...";
}


cell.selectionStyle = UITableViewCellSelectionStyleNone;

return cell;
}
4

4 に答える 4

6

atebits (Tweetie の作成者) からのこのブログ エントリが役立つかもしれません: http://blog.atebits.com/2008/12/fast-scrolling-in-tweetie-with-uitableview/

要点を言えば、秘密は次のとおりです。表のセルごとに 1 つのカスタム ビューを作成し、独自の描画を行います。シンプルに聞こえますか?それはそれであるからです。実際には、ラベルや画像の大量のサブビューを処理するよりも簡単で、約 10 億倍も高速です (私の非公式のテストによると)。

于 2010-03-26T22:16:29.710 に答える
0

テーブル ビュー セルをロードするために nib ファイルを使用している場合、明らかにロードに時間がかかり、ぎくしゃくした感じがします。

そのための最善の方法は、コードを使用してビューを設計し、メソッドをオーバーライドすることです

drawInRect

これにより、UITableView の場合、アプリケーションのスクロールが非常にスムーズになります。

于 2013-05-22T07:22:58.113 に答える
0

nib をロードせず、カスタム セルを完全にコードで作成することで、おそらく大幅なスピードアップが見られるでしょう。

それ以外の場合は、隠れた速度低下がどこに潜んでいるかを把握するために、プロファイリングを行う必要があります。

于 2010-03-26T22:01:03.997 に答える