0

我的表格视图添加了内联单元格。

我有 cellForRowAtIndexPath:

    VMEditableTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"EditableCell"];
    cell.editableTF.font = [UIFont fontWithName:@"Helvetica" size:17.0];
    cell.editableTF.delegate = self;
    cell.editableTF.tag = indexPath.row;
    [cell.editableTF setBorderStyle:UITextBorderStyleNone];

    if ([self.extrasArray[indexPath.row] isEqual:@0]) { // recognise new added cell
        self.extrasArray[indexPath.row] = @"";
        [cell.editableTF becomeFirstResponder];
    }
    cell.editableTF.text = self.extrasArray[indexPath.row];
    return cell;

当我开始表格视图时 - 内联添加工作正常。

当我使用“清除整个列表”按钮时问题就开始了 - 它只是从 extrasArray 中删除所有对象。

当我在清除后添加单元格时,它被不正确地出队并且文本字段没有响应 becomeFirstResponder。(它不是零,它调用 textFieldShouldBeginEditing(always YES) 但没有更多的事情发生 - 没有键盘出现。

我的最后一个想法是在 Cell 实现中覆盖 prepareForReuse 方法 - 但遗憾的是,既没有将 editableTF 设置为 nil 也没有重新初始化它不起作用。

如何强制细胞重新创建而不是应对?

4

2 回答 2

0

尝试创建一个这样的单元格

static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:nil];
if (cell == nil) 
{
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

    //  Set up the cell..
    [self configureCell:cell atIndexPath:indexPath];        
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
}

'

于 2013-08-14T12:48:07.970 回答
0

所以今天早上非常适合代码灵魂,最后我想出了一个解决这个问题的方法:

我摆脱了这个单元格的情节提要,并将自定义单元格的所有指针都更改为强(所以我拥有它们)。

Dequeque 可重用单元正在从已删除的行中重新创建 UITextField,这使控制器对所有权感到困惑并成为第一响应者。

请注意,在单元格 init 中创建它们并没有奏效。

必须创建 TextField 并将其添加为子视图(也分配给强指针,以便我稍后控制它)。

这是一些代码:

    VMEditableTableViewCell *cell = [[VMEditableTableViewCell alloc] init];
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];

    UIImage *bulletImage = [UIImage imageNamed:@"common_ico_dot.png"];
    UIImageView *bulletImageView = [[UIImageView alloc] initWithFrame:CGRectMake(20,17,10, 10)];
    bulletImageView.image = bulletImage;

    UIImage *tickImage = [UIImage imageNamed:@"common_green_tick.png"];
    UIImageView *tickImageView = [[UIImageView alloc] initWithFrame:CGRectMake(cell.bounds.size.width-30, 17, tickImage.size.width, tickImage.size.height)];
    tickImageView.image = tickImage;
    tickImageView.hidden = YES;

    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(60, 10, 227, 30)];
    textField.autocorrectionType = UITextAutocorrectionTypeNo;
    textField.autocapitalizationType = UITextAutocapitalizationTypeNone;
    textField.delegate = self;
    textField.font = [UIFont fontWithName:@"Maven Pro" size:17.0];
    textField.tag = indexPath.row;
    [textField setBorderStyle:UITextBorderStyleNone];

    [cell addSubview:bulletImageView];
    cell.bulletImageView = bulletImageView;
    [cell addSubview:tickImageView];
    cell.tickImageView = tickImageView;

    if (cell.editableTF == nil) {
        [cell addSubview:textField];
        cell.editableTF = textField;
    }
于 2013-08-16T08:39:41.537 回答