UITableViewCell中的UITextField不接受becomeFirstResponder

时间:2014-04-29 17:50:39

标签: ios objective-c uitableview uitextfield

我想允许我的应用程序的用户点击一个按钮,该按钮创建一个包含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'消息总是是的,但是'第一个?'即使键盘出现在第一行,也总是不行。

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

- (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];
}

对此问题的任何见解都将不胜感激。

0 个答案:

没有答案