UITableViewCell中的UITextField将不接受becomeFirstResponder

我想让我的应用程序的用户点击一个按钮,该按钮创建一个包含UITextField的新的UITableViewCell。 应用程序必须允许用户从该单元格的键盘输入数据。 一旦单元格被编辑,它就不能在以后编辑。 我已将UITextField添加到故事板中的UITableViewCell。

下面的代码仅适用于第一行 - 点击添加按钮时,UITextField显示为空,并成为第一响应者(出现键盘)。 点击键盘上的我的完成按钮将新文本添加到tableview的数组中,并退出第一个响应者。 但是当再次点击添加按钮时,会创建新行,但文本字段不会成为新的第一响应者。 如果我点击新行,键盘显示正确。

- (void)addButtonTapped:(id)sender{
    [self.players insertObject:@"" atIndex:0];
    [self.tableView reloadData];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"players cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    NSString *cellText = self.players[indexPath.row];

    UITextField *nameField = (UITextField *)[cell.contentView.subviews lastObject];
    nameField.delegate = self;
    nameField.inputAccessoryView = [self makeKeyboardToolbar];
    nameField.text = cellText;

    // only set first responder if text to be diplayed is an empty string
    if (cellText.length == 0) {
            NSLog(@"canBecomeFirstResponder %@",nameField.canBecomeFirstResponder?@"Y":@"N");
            BOOL isFirst = [nameField becomeFirstResponder];
            NSLog(@"is first? %@",isFirst?@"Y":@"N");
    }
    return cell;
}

在NSLog消息中找到了真正奇怪的东西。 'canBecomeFirstResponder'消息总是是的,但'isFirst?' 总是没有,即使键盘出现在第一行。

我使用UITextField属性在委托方法中保存指向当前第一响应者的指针,然后更新数据数组并在我的doneWithKeyboard方法中退出第一个响应者,该方法由my Done按钮调用:

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    self.currentFirstResponder = textField;
    NSLog(@"textFieldDidBeginEditing");
}

- (void)doneWithKeyboard {
    NSString *fieldText = self.currentFirstResponder.text;
    [self.currentFirstResponder resignFirstResponder];
    self.currentFirstResponder = nil;
    [self.players replaceObjectAtIndex:0 withObject:fieldText];
}

任何洞察这个问题将不胜感激。

链接地址: http://www.djcxy.com/p/44305.html

上一篇: UITextField in UITableViewCell won't accept becomeFirstResponder

下一篇: UITableViewCell Resign FirstResponder