UITableViewCell显示错误的内容

时间:2014-11-24 07:56:37

标签: objective-c

它基于UITableViewController。 我的表由两部分组成,

(1)frist部分显示数组中的对象,标签文本为黑色并具有详细的文本

(2)第二部分有一行,用于进入新的ViewController以添加更多对象

初始视图是正确的,但是,当我尝试向数组添加更多对象并重新加载数据时,该表显示错误单元格的错误内容。

那么有谁能告诉我哪里或哪些我做错了?

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
  return 2;
}

- (NSInteger)tableView:(UITableView *)tableView
 numberOfRowsInSection:(NSInteger)section {
  if (section == 0) return self.addItems.count;
  else return 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  static NSString *cellIdentifier = @"Add Items List";
  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier
                                                          forIndexPath:indexPath];

  if (!cell) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
                                  reuseIdentifier:cellIdentifier];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
  }

  if (indexPath.section == 0) {
    Item *item = [self.addItems objectAtIndex:indexPath.row];
    cell.textLabel.text = [NSString stringWithFormat:@"%08i", item.identifier.intValue];
    cell.detailTextLabel.text = item.detailDescription;
  }
  else {
    cell.textLabel.text = @"Create Item";
    cell.textLabel.textColor = [tableView tintColor];
    cell.detailTextLabel.text = nil;
  }

  return cell;
}

- (void)unwindToAddItemsViewController:(UIStoryboardSegue *)segue {
  CreateItemViewController *source = [segue sourceViewController];
  [self.addItems addObjectsFromArray:source.createItems];
  [self.tableView reloadData];
}

2 个答案:

答案 0 :(得分:0)

如果我认为“错误内容”意味着第一部分中单元格的textLabel颜色错误,我是否正确?

那是因为你没有在section == 0代码路径中设置textLabel的textColor。单元格被重用,因此如果使用相同的重用标识符,则必须在所有代码路径中设置属性。第1部分中的单元格在设置后保留标签的textColor。因此,如果该单元格被重新用作第0部分单元格,则必须将其更改回该部分中所需的值。

由于您使用dequeueReusableCellWithIdentifier:forIndexPath:将单元格出列,因此可以删除if (!cell)部分。该方法永远不会返回零。

您的代码应如下所示:

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  static NSString *cellIdentifier = @"Add Items List";
  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier
                                                          forIndexPath:indexPath];

  if (indexPath.section == 0) {
    Item *item = [self.addItems objectAtIndex:indexPath.row];
    cell.textLabel.text = [NSString stringWithFormat:@"%08i", item.identifier.intValue];

    cell.textLabel.textColor = [UIColor blackColor]; // NEW

    cell.detailTextLabel.text = item.detailDescription;
  }
  else {
    cell.textLabel.text = @"Create Item";
    cell.textLabel.textColor = [tableView tintColor];
    cell.detailTextLabel.text = nil;
  }
  return cell;
}

答案 1 :(得分:0)

谢谢,这解决了我的问题。这就是事情的运作方式。现在我更了解这个dequeue可重用的东西!

但它仍有问题。通过显示"错误的内容",我的意思是它有错误的颜色,并且在我点击它之前没有任何字幕显示。标题下有一个副标题的空格,但它是空白的,直到我点击它为止。

现在颜色正确,但是在我点击之前字幕仍然没有显示。