使用自定义单元格在tableView上“加载更多...” - 单元格重用导致了一些问题

时间:2012-08-27 09:40:09

标签: iphone ios xcode cocoa-touch uitableview

我正在尝试在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,而不是重用它,因为它只是一个。这是好方法吗?你能用更好的东西给我建议吗? 谢谢!

2 个答案:

答案 0 :(得分:1)

另一种方法是使用2个不同的小区标识符,一个用于识别和重用(一旦最初创建)一个ArticlesCell,另一个用于识别和重用(一旦最初创建)“加载更多......”UITableViewCell。至少那时你只会创建一次“加载更多......”UITableViewCell,而不是每次滚动到视图中。

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

LazyTableImages Apple iOS示例项目使用类似的方法(请参阅Classes / RootViewController.m)。

答案 1 :(得分:0)

当您点击加载更多按钮时,然后增加行数并重新加载tableview。即在方法numberofrowsinsection。让我知道你是否还需要