Чтобы решить вашу первую проблему, я бы начал с вытягивания кода создания 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: method ...
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
...
// Custom initialization code
[self textFieldForCell:cell withDelegate:self];
}
Теперь, чтобы убедиться, что ответ вашего UITextField на ключ возврата реализует метод textFieldShouldReturn: вашего UITextFieldDelegate (возможно, вашего UITableViewController), который всегда возвращает true ...
-(bool)textFieldShouldReturn:(UITextField*)textField {
return YES;
}
Что касается вашей второй проблемы, я полагаю, что это результат прямого вызова reloadData. Это заставит ваш UITableView воссоздать его ячейки. Это, в свою очередь, воссоздает ваши UITextFields, и вы впоследствии теряете их состояние / текст. Я думаю, что вашим следующим логическим шагом будет введение модели (NSMutableArray), которая хранит состояние каждого UITextField. Вы можете начать с сохранения текста поля в массив после получения UITextFieldDelegate сообщения textFieldShouldReturn.