动态添加UITextField与UITableViewCell
我试图有一个UITableView,我可以动态添加和删除行,并且行中有一个UITextField。对于添加的行,我正在使用的代码:动态添加UITextField与UITableViewCell
- (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;
}
我有这个代码的多个问题。第一个问题是我做了预设数量的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];
}
在您的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重新创建它的单元格。这又会重新创建您的UITextFields,然后您将丢失其状态/文本。我认为你的下一个逻辑步骤是引入一个存储每个UITextField状态的模型(NSMutableArray)。您可以先在UITextFieldDelegate接收到textFieldShouldReturn消息时将字段的文本保存到数组中。
非常好!这很好地回答了我的问题。 –
你是伟人! – IKKA