它基于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];
}
答案 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可重用的东西!
但它仍有问题。通过显示"错误的内容",我的意思是它有错误的颜色,并且在我点击它之前没有任何字幕显示。标题下有一个副标题的空格,但它是空白的,直到我点击它为止。
现在颜色正确,但是在我点击之前字幕仍然没有显示。