清除后,UITableViewCell仍显示与文本重叠的图像

时间:2011-04-25 10:24:06

标签: iphone cocoa-touch uitableview

我有UITableViewController显示一堆'n'行(全部使用标准UITableViewCell类),其中最后一行有一个图像(一个小'+'图标表示'添加记录')。

假设以下情形:

  1. 用户点击最后一行,将新视图控制器推送到导航堆栈
  2. 然后,用户填写表单以添加使用Core Data
  3. 保存的新记录
  4. 然后从导航堆栈弹出表单,返回第一个UITableViewController,然后调用[self.tableView reloadData]以确保显示新状态
  5. 您现在看到'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;
    }
    

3 个答案:

答案 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];