UITableView单元格中的UITextField在删除数据后无法成为FirstResponder

时间:2013-08-14 12:33:36

标签: uitableview

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

我已经进入了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(总是YES)但没有更多的事情发生 - 没有键盘出现。

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

如何强制细胞重建自己而不是应对?

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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;
    }