我试图拥有一个UITableView,可以动态地添加和删除行,并且行中包含UITextField。为了添加行,我使用了以下代码:
- (void) addRow
{
[nameArray addObject:[NSString stringWithFormat:@"%i", x]];
[self.tableView reloadData];
x++;
}
我只是对nameArray进行计数,以获取tableView中有多少行。然后,在cellForRowAtIndexPath内部,我有以下代码
- (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;
}
这段代码有多个问题。第一个问题是我正在预设数量的UITextField,以便可以在textFieldShouldReturn中全部调用它们。有什么好方法可以生成当我按下完成键时返回的UITextFields吗?
我现在执行此操作的方式的第二大问题是,每次添加新的UITextField都会被清除。知道为什么吗?
最佳答案
为了解决您的第一个问题,我将从拉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];
}
然后在tableView:cellForRowAtIndexPath:方法中调用新方法...
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
...
// Custom initialization code
[self textFieldForCell:cell withDelegate:self];
}
现在,确保您的UITextField对返回键的响应实现了UITextFieldDelegate(可能是UITableViewController)的textFieldShouldReturn:方法,以始终返回true。
-(bool)textFieldShouldReturn:(UITextField*)textField {
return YES;
}
至于第二个问题,我相信这是直接调用reloadData的结果。这将强制您的UITableView重新创建其单元格。反过来,这将重新创建您的UITextField,随后您将丢失其状态/文本。我认为您的下一个逻辑步骤将是引入一个模型(NSMutableArray),该模型存储每个UITextField的状态。您可以首先在UITextFieldDelegate收到textFieldShouldReturn消息后将字段的文本保存到数组中。
关于iphone - 动态添加带有UITextField的UITableViewCell,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6962298/