在UITableViewCell内的UITextField中未清除字符

时间:2012-01-17 09:41:28

标签: ios uitableview uitextfield

我使用表来编辑模型对象(注释实例)的属性。表中的单元格对应于Annotation类的不同属性:

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellAnnotation"];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2  reuseIdentifier:@"cellAnnotation"] autorelease];
    }
    [[cell textLabel] setText:@"Category"];
    categoryField = [[UITextField alloc] initWithFrame:CGRectMake(90, 8, 200, 25)];
    [categoryField setAutocorrectionType:UITextAutocorrectionTypeNo];
    [categoryField setFont:[UIFont fontWithName:@"Verdana" size:15]];
    [categoryField setText:[[annotation category] name]];
    [categoryField setDelegate:self];
    [[cell contentView] addSubview:categoryField];
    [categoryField release];
    return cell;

令人惊讶的是,如果我在控制器的viewWillAppear方法中重新加载数据,那么我会得到一个奇怪的行为:当按下退格键时,UITextField中的字符不会被清除,尽管它们在第一个响应者辞职时不存在在UITextField中并检索其text属性。谁能帮我?提前致谢。

1 个答案:

答案 0 :(得分:1)

您不应将子视图添加到if(cell == nil){...}子句之外的表格单元格中。表格单元格被重新循环,因此每次调用cellForRowAtIndex时,您都会再次将该子视图添加到表格单元格而不删除旧的子视图。这可能就是为什么看起来文本没有被清除的原因,因为你在单元格中添加了多个字段。

请查看我写的其他答案,以获得更详细的解释:

cellForRowAtIndexPath memory management