Iphone 动态添加UITableViewCell和UITextField

Iphone 动态添加UITableViewCell和UITextField,iphone,xcode,uitableview,uitextfield,Iphone,Xcode,Uitableview,Uitextfield,我试图拥有一个UITableView,可以从中动态添加和删除行,并且这些行中有一个UITextField。对于添加行,我使用以下代码: - (void) addRow { [nameArray addObject:[NSString stringWithFormat:@"%i", x]]; [self.tableView reloadData]; x++; } 我只是对nameArray进行计数,以得到我的tableView中有多

我试图拥有一个UITableView,可以从中动态添加和删除行,并且这些行中有一个UITextField。对于添加行,我使用以下代码:

- (void) addRow
    {
        [nameArray addObject:[NSString stringWithFormat:@"%i", x]];
        [self.tableView reloadData];
        x++;
    }
我只是对nameArray进行计数,以得到我的tableView中有多少行。然后,在cellforrowatinexpath中,我得到了以下代码

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ...
    /*Default Apple-y stuff*/
    ...
    if ([indexPath row] == 0) {
        playerTextFieldZero = [[UITextField alloc] initWithFrame:CGRectMake(20, 10, 185, 30)];
        playerTextFieldZero.adjustsFontSizeToFitWidth = YES;
        playerTextFieldZero.placeholder = @"Name";
        playerTextFieldZero.textColor = [UIColor blackColor];
        playerTextFieldZero.returnKeyType = UIReturnKeyDone;
        playerTextFieldZero.backgroundColor = [UIColor whiteColor];
        playerTextFieldZero.autocorrectionType = UITextAutocorrectionTypeNo; // no auto correction support
        playerTextFieldZero.textAlignment = UITextAlignmentLeft;
        playerTextFieldZero.tag = 0;
        playerTextFieldZero.delegate = self;
        playerTextFieldZero.clearButtonMode = UITextFieldViewModeNever; // no clear 'x' button to the right
        [playerTextFieldZero setEnabled: YES];
        [cell addSubview:playerTextFieldZero];
        [playerTextFieldZero becomeFirstResponder];
        [playerTextFieldZero release];
    }
    ...
    /*More of those in here*/
    ...
return cell;
}
我对这段代码有多个问题。第一个问题是我正在做一个预设数量的UITextFields,这样我就可以在textFieldShouldReturn中调用它们。是否有一个好方法可以生成UITextFields,当我按下done键时返回该字段


我现在这样做的第二大问题是每次添加新字段时,我的UITextFields都会被清除。知道为什么吗?

要解决第一个问题,我首先将UITextField创建代码拉入一个方法中

- (UITextField*)textFieldForCell:(UITableViewCell*)cell withDelegate:(id<UITextFieldDelegate>*)delegate {
    UITextField textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 10, 185, 30)];
    textField.delegate = self;
    ....
    [cell addSubview:playerTextFieldZero];
    [textField release];
}
现在,为了确保UITextField响应return键,请实现UITextFieldDelegate(可能是UITableViewController)的textFieldShouldReturn:方法以始终返回true

-(bool)textFieldShouldReturn:(UITextField*)textField {
    return YES;
}

至于第二个问题,我相信这是直接调用重载数据的结果。这将强制UITableView重新创建其单元格。这反过来会重新创建UITextFields,随后会丢失它们的状态/文本。我认为您的下一个逻辑步骤将是引入一个模型(NSMutableArray),该模型存储每个UITextField的状态。当UITextFieldDelegate收到textFieldShouldReturn消息时,您可以首先将字段文本保存到数组中。

太好了!这很好地回答了我的问题。
-(bool)textFieldShouldReturn:(UITextField*)textField {
    return YES;
}