dequeueReusableCellWithIdentifier导致空表单元格

时间:2013-07-01 00:19:26

标签: ios ios6 uitableview

我的目标是显示由我从服务器下拉的一些数据填充的单元格列表。当用户向下滚动时,我想简要地说,一个表格单元格显示“正在加载更多”,然后随着更多单元格填入数据而消失。

以下是执行此操作的相关部分:

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

   [tableView registerClass:[CGSitesCell class] forCellReuseIdentifier:cellIdentifier];
   // Option 1:   CGSitesCell *cell = [[CGSitesCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
   // Option 2:   CGSitesCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
   //(Still Option 2):  
   //if(cell == nil){
   //      cell = [[CGSitesCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
    }
   if(backupsArray.count !=0){
       //if we not on the last row
      if (indexPath.row < backupsArray.count) {
             [cell.textLabel setText:someData];
      }else{
        UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                                   reuseIdentifier:cellIdentifier];
       [cell.textLabel setText:@"Load More"];
       return cell;
      }
   return cell;
 }

以下是我难倒的事情:选项1有效。我看到了我想要查看的数据,并在底部看到了“加载更多”。但是,选项2不起作用!我看到了数据,但我只看到一个BLANK表格单元格。为什么呢?

谢谢!

2 个答案:

答案 0 :(得分:1)

我遇到了你的问题并且不知道你是否发现了问题,但是如果自定义单元格是使用Interface Builder构建的,那么你应该注册Nib,而不是类:

    [self.tableView registerNib:[UINib nibWithNibName:@"CGSitesCell" bundle:nil] forCellReuseIdentifier:@"CGSitesCellIdentifier"];

请在ViewDidLoad中进行,而不是在为所有单元格调用的cellForRowAtIndexPath中进行: - )

答案 1 :(得分:0)

我通过将“加载更多”设置为UIView并将其设置为UITableView页脚视图而不是将其设置为表格单元格然后仅在最后一个时使其显示来完成此操作使用

可以看到表格的一行

` - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {     if(indexPath.row == [backupsArray count] - 1){

       //load more records here

    }

}`

我还必须设置一个BOOL实例变量来跟踪我何时加载更多,因为这个方法被多次调用,最后一个单元格可见,我不想重复加载更多记录。 / p>