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;
}

它工作得很好,但发生的是它正在重用单元格,如果我滚动,每五个单元格(这是高度 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,而不是重用它,因为它只是一个。这是好方法吗?你能给我一些更好的建议吗?谢谢!

4

2 回答 2

1

另一种方法是使用 2 个不同的单元格标识符,一个用于识别和重用(最初创建后)ArticlesCell,另一个用于识别和重用(一旦最初创建)“加载更多...”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 回答