1

tableView に「もっと読み込む...」を実装しようとしています。やったことはありますが、効率的かどうかはわかりません。事は、私はカスタムセルを持っているということです.私がこれを好きなら:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"Cell";

    ArticlesCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (cell==nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ArticlesCell" owner:self options:NULL];
        cell = (ArticlesCell *) [nib objectAtIndex:0];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    }
    tableView.backgroundColor = cell.backgroundColor;

    if (indexPath.row <= (self.bookmarks.count - 1)) {
        [self configureCell:cell atIndexPath:indexPath];
    }else{
        cell.textLabel.text = @"Load more...";
    }

    return cell;
}

それはうまく機能しますが、セルを再利用しています。スクロールすると、5 つおきのセル (これは高さ 77.0) に「さらに読み込む...」というラベルが付けられますが、実際には通常どおりに機能します。この回避策を見つけましたが、それが適切で効率的かどうかはわかりません。

ここにあります:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"Cell";
    if (indexPath.row <= (self.bookmarks.count - 1)) {

    ArticlesCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (cell==nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ArticlesCell" owner:self options:NULL];
        cell = (ArticlesCell *) [nib objectAtIndex:0];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    }
    tableView.backgroundColor = cell.backgroundColor;

        [self configureCell:cell atIndexPath:indexPath];
        return cell;
    }else{
        UITableViewCell *cell = [[UITableViewCell alloc] init];
        cell.textLabel.text = @"Load more...";
        return cell;
    }
}

ご覧のとおり、「もっと読み込む...」セルを単純な UITableViewCell にしていますが、それは 1 つしかないため、再利用しません。これは良いアプローチですか?何か良いアドバイスをいただけないでしょうか?ありがとうございました!

4

2 に答える 2

1

もう 1 つのアプローチは、2 つの異なるセル識別子を使用することです。1 つは ArticlesCell を識別して再利用し (最初に作成した後)、もう 1 つは "もっと読み込む..." UITableViewCell を識別して再利用します (最初に作成した後)。少なくとも、「もっと読み込む...」 UITableViewCell をスクロールして表示するたびに作成するのではなく、一度だけ作成します。

static NSString *ArticleCellIdentifier = @"ArticleCell";
static NSString *LoadMoreCellIdentifier = @"LoadMoreCell";

LazyTableImages Apple iOS サンプル プロジェクトは、同様のアプローチを使用しています (Classes/RootViewController.m を参照)

于 2012-08-27T11:35:52.470 に答える
0

loadmore ボタンをクリックしたら、行数を増やして tableview をリロードします。つまり、numberofrowsinsection メソッドで。これ以上必要な場合はお知らせください。

于 2012-08-27T10:04:35.293 に答える