1

UITableViewCell読み取り専用の cell.contentView の代わりに、entryView というプロパティを持つサブクラスがあります。テーブル ビューを正しく使用していると思いました。セルはエントリごとに再利用され、毎回すべてを追加する必要があることを思い出しました。ただし、スクロールすると、セルの entryView が消えることがあります。セルは引き続き存在しますが、entryView はスーパービューから削除されたように見えます。ここに私の cellForRowAtIndexPath があります:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    JTimelineCell *cell = (JTimelineCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[JTimelineCell alloc] initWithStyle:UITableViewCellStyleDefault
                                    reuseIdentifier:CellIdentifier];

    }

    JTimelineCellContentView *contentView;

    Entry *entry = [_fetchedResultsController objectAtIndexPath:indexPath];

    if ([self.cellContentCache objectForKey:entry.entryID]) {
        contentView = [self.cellContentCache objectForKey:entry.entryID];

        contentView.frame = cell.bounds;
        [contentView setNeedsDisplay];
    }
    else {

        contentView = [[JTimelineCellContentView alloc] initWithFrame:cell.bounds];


        [self.cellContentCache setObject:contentView forKey:entry.entryID];

        contentView.time = [NSDate timeStringForTime:entry.creationDate];

        contentView.message = entry.message;

        [cell setNeedsDisplay];
}

    [cell.entryView removeFromSuperview];
    cell.entryView = contentView;

    [cell addSubview:cell.entryView];

    return cell;
}
4

2 に答える 2

2

別の質問に似たようなものを投稿したと思います。セルの contentView をキャッシュすることはできません。画像、文字列、数値、値などをキャッシュできますが、最終的にセルを取得したら、それらの値を表示する要素を取得し、その値を設定する必要があります。したがって、画像、文字列、CGRects などをキャッシュすることができます。セルにデータを入力するように求められたら、キャッシュを確認し、有効な場合はキャッシュした値を取得します。キャッシュが設定されていない場合は、最初から作成する必要があります。

特定のセクション/行のセルを取得するたびに、それは異なります。古い値が含まれている場合もあれば、新しい値が含まれている場合もあります。項目ごとに各 GUI 要素を設定する必要があります。これらの要素を見つけやすくする 1 つの方法は、それぞれに一意のタグを付けることです。[cell.contentView viewForTag:xxx] を使用して項目を取得し、設定できます。

于 2012-07-19T00:24:55.317 に答える
1

はいの場合、 heightForRowAtIndexPathメソッドを使用しましたか?その高さを増やして解決した問題で、私の場合、同様の修正を試みていたので気が狂いました。

于 2016-02-19T05:46:24.460 に答える