在 tableView 中插入新行后保存成为第一响应者的 UITextField 文本

Posted

技术标签:

【中文标题】在 tableView 中插入新行后保存成为第一响应者的 UITextField 文本【英文标题】:Save UITextField text that become first responder after inserting new row in tableView 【发布时间】:2014-04-10 20:57:10 【问题描述】:

我已经实现了在表格处于编辑模式时在 tableView 中插入新行的方法。 当我按下带有绿色“加号”图标的单元格时,会在带有绿色“加号”的单元格上方添加一个新单元格。新单元格包含一个空的 textField,它成为第一响应者并打开键盘。这是我的代码:

- (void)setEditing:(BOOL)editing animated:(BOOL)animated 

    [super setEditing:editing animated:animated];
    if (editing) 
        [self.tableView beginUpdates];
        [self.tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:[itemsArray count] inSection:0]] withRowAnimation:UITableViewRowAnimationAutomatic];
        [self.tableView endUpdates];
     else 
        [self.tableView beginUpdates];
        [self.tableView deleteRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:[itemsArray count] inSection:0]] withRowAnimation:UITableViewRowAnimationAutomatic];
        [self.tableView endUpdates];

    


- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 

    if (indexPath.row >= [itemsArray count]) 
        return UITableViewCellEditingStyleInsert;
     else 
        return UITableViewCellEditingStyleDelete;
    


- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 

    if (editingStyle == UITableViewCellEditingStyleDelete) 
        [self.tableView beginUpdates];
        [itemsArray removeObjectAtIndex:indexPath.row];
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
        [self.tableView endUpdates];

    
    else if (editingStyle == UITableViewCellEditingStyleInsert) 
        [self.tableView beginUpdates];
        [itemsArray addObject:@""];
        [tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
        [self.tableView endUpdates];
        ClientCell * cell = (ClientCell*)[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:indexPath.row inSection:0]];
        cell.cellText.enabled = YES;
        cell.cellText.delegate = self;
        [cell.cellText becomeFirstResponder];
    

问题:如何将我在 cell.textField 中键入的文本保存在 itemsArray 中?单元格成为第一响应者,从那里我需要一些关于如何将该文本保存在数组中的建议或指导。

【问题讨论】:

【参考方案1】:

您已经在单元格中设置了 UITextField 的委托,所以只需实现:

- (void)textFieldDidEndEditing:(UITextField *)textField 
    NSString *text = textField.text;
    // Do whatever you want with the text, like putting it in the array

我不确定单元格是否有一个按钮来保存文本或类似的东西。上面的方法会在 uitextfield 失去焦点时触发。

【讨论】:

以上是关于在 tableView 中插入新行后保存成为第一响应者的 UITextField 文本的主要内容,如果未能解决你的问题,请参考以下文章

在 tableview 中插入新行会重复最后一行

快速在表格视图中插入新行时应用程序崩溃?

如何在插入新行后立即将自动生成的主键值保存到第二列

TableView:是不是可以在不重新加载 tableview 或部分的情况下删除现有行并插入新行?

当我插入新行时,UITableView 正在跳跃

插入新行时 TableView 滚动到中间