我有UITableViewController
显示一堆'n'行(全部使用标准UITableViewCell
类),其中最后一行有一个图像(一个小'+'图标表示'添加记录')。
假设以下情形:
UITableViewController
,然后调用[self.tableView reloadData]
以确保显示新状态您现在看到'n + 1'行,其中最后一行显示'+'图像。问题是我遇到了一个错误,行'n'仍然显示'+'图像,除了它与该单元格的文本标签重叠(我可以理解它显示'+'图像的错误文本的左侧 - 我明确设置imageView.image = nil
以避免这种情况 - 但是图像与文本重叠的事实使得这个非常奇怪)。
以下是我的cellForRowAtIndexPath
函数的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *CellIdentifier = @"Cell";
UITableViewCellStyle cellStyle;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
if ((self.selectedCategory != nil) && (indexPath.row < [self.selectedCategory.subjects count])) {
Subject *managedObject = (Subject*)[self.selectedCatSubjects objectAtIndex:indexPath.row];
cell.textLabel.text = managedObject.name;
cell.imageView.image = nil; // Needed in case there used to be a "+" icon
} else {
cell.textLabel.text = @"Add subject...";
[cell.imageView initWithImage:_addIcon];
}
return cell;
}
答案 0 :(得分:2)
尝试为最后一行使用不同的标识符:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *CellIdentifier = @"Cell";
UITableViewCellStyle cellStyle;
BOOL isFinalRow = (self.selectedCategory == nil) || (indexPath.row >= [self.selectedCategory.subjects count]);
if (isFinalRow) {
CellIdentifier = @"AddCell";
}
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
if (!isFinalRow) {
Subject *managedObject = (Subject*)[self.selectedCatSubjects objectAtIndex:indexPath.row];
cell.textLabel.text = managedObject.name;
cell.imageView.image = nil; // Needed in case there used to be a "+" icon
} else {
cell.textLabel.text = @"Add subject...";
[cell.imageView initWithImage:_addIcon];
}
return cell;
}
答案 1 :(得分:1)
我的一个应用程序中有一个类似的功能,其中我有一个加载更多按钮作为最后一个单元格。我为最后一个单元格使用了不同的标识符,它对我有用。
if(indexPath.row==[self.selectedCategory.subjects count])
{
cellIdentifier = @"PlusCell";
}
答案 2 :(得分:1)
这对我有用。
替换:
static NSString *CellIdentifier = @"Cell";
在
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
with:
NSString *CellIdentifier = [NSString stringWithFormat:@"%d_%d",indexPath.section,indexPath.row];