objective-c - 重用时重置自定义 UITableViewCells 内容

标签 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;
}

最佳答案

将创建 subview 的代码移到检查 methodCell 是否为 nil 的 block 内。仅更新该 block 之外的内容。要在 block 外访问它们,请在创建它们时设置它们的标签值,并使用 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];

关于objective-c - 重用时重置自定义 UITableViewCells 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7124464/

相关文章:

iOS 应用镜像 "Screen Saver"

cocoa - 创建 Cocoapod 库和 [UIImage imageNamed :] returns NULL

ios - plist的最大存储容量是多少?

iphone - ASIHTTPRequest:从网络队列中的多个请求接收委托(delegate)

ios - PFFacebookUtils logInWithPermissions :block loses permissions

objective-c - 如何让键盘在显示前延迟大约 1/2 秒?

ios - 是否可以在没有原始私钥的情况下发布 iOS 应用程序的更新?

iphone - 具有多个文本字段的组 TableView

Objective-C 错误 : Property 'active' is a scalar type on class 'Routine' . 无法为其生成 getter 方法

ios - 在 MFMailComposeViewController 中将“发送和取消”按钮设置为白色背景上的白色以外的其他内容