在重用时重置自定义UITableViewCells内容

时间:2011-08-19 16:15:09

标签: objective-c ios cocoa-touch uitableview

我正在使用以下代码创建一个带有标签的自定义UITableViewCell。

我遇到的问题是细胞在重复使用时没有被清除,我不知道该怎么做,因为我不认为我可以在它出列时访问细胞内容。

有谁能告诉我,我该怎么做?

if (indexPath.section == 2) {
    // Resetting the elements in the cell prior to use.

    UIView *blankCell;
    UILabel *methodText;

    static NSString *methodCellIdentifier = @"Method Cell";

    methodCell = [tableView dequeueReusableCellWithIdentifier: methodCellIdentifier];

    if (methodCell == nil)
    {
        methodCell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier: methodCellIdentifier] autorelease];
    }

    blankCell = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
    methodText = [[UILabel alloc] initWithFrame:CGRectMake(15, 7, 305, 44)];
    methodText.text = [[self.recipeDict objectForKey:@"Method"] objectAtIndex: indexPath.row];
    NSLog(@"methodText.text = %@", methodText.text);
    [methodText setLineBreakMode:UILineBreakModeWordWrap];
    [methodText setNumberOfLines:0];
    [methodText sizeToFit];

    [blankCell addSubview:methodText];
    [methodCell.contentView addSubview:blankCell];

    [methodText release];

    methodCell.contentMode = UIViewContentModeRedraw;

    return methodCell;
}

1 个答案:

答案 0 :(得分:1)

将创建子视图的代码移动到块中,以检查methodCell是否为nil。仅更新该块之外的内容。要在块外部访问它们,请在创建它们时在它们上设置标记值,并使用viewWithTag查找和更新其内容:

 if (methodCell == nil)
    {
        methodCell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier: methodCellIdentifier] autorelease];
        blankCell = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
        methodText = [[UILabel alloc] initWithFrame:CGRectMake(15, 7, 305, 44)];
        [methodText setLineBreakMode:UILineBreakModeWordWrap];
        [methodText setNumberOfLines:0];
        [blankCell addSubview:methodText];
        [methodCell.contentView addSubview:blankCell];

        methodText.tag = 1;

        [methodText release];
        [blankCell release];

        methodCell.contentMode = UIViewContentModeRedraw;
    }

    methodText = (UITextField*)[methodCell viewWithTag:1];
    methodText.text = [[self.recipeDict objectForKey:@"Method"] objectAtIndex: indexPath.row];
    NSLog(@"methodText.text = %@", methodText.text);
    [methodText sizeToFit];
相关问题