Как уже объяснил Шреурс, вам необходимо реализовать протокол UITextFieldDelegate для вашего viewController (вместе с UITableViewDataSource), изучите их в документации, чтобы узнать больше о том, что вы можете с ними сделать. Но это сложнее, чем иметь различные UITextFields в вашем представлении.
Вы должны учитывать тот факт, что, когда ячейка покидает видимый диапазон таблицы, она будет освобождена или повторно использована. Так, если, например, ячейка 1 содержит текстовое поле, в котором вы что-то пишете, а затем прокрутите до ячейки 15, вы, вероятно, получите ячейку с текстовым полем ячейки 1 и ее содержимым. Если вы подготавливаете свои ячейки для повторного использования, очищая textFields, вы должны хранить эти данные где-то, чтобы повторно ввести их в соответствующую ячейку. После всего этого вы поцарапаете голову тому, что textField вызывает вашего делегата (возможно, ваш viewController, поэтому вам придется пометить их номером, из которого вы можете извлечь номер строки - т.е. cell.textField.tag = indexPath .row + 100).
Итак, чтобы подвести итог, вы хотите что-то подобное в вашем viewController
- (void)textFieldDidEndEditing:(UITextField *)textField {
if ([textField.text length] > 0) {
NSUInteger row = textField.tag - 1;
[textFieldValues setObject:textField.text forKey:[NSNumber numberWithInt:row]];
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellId = @"cellId";
TextFieldTableViewCell *cell = (TextFieldTableViewCell *) [tableView dequeueReusableCellWithIdentifier:cellId];
if (!cell)
cell = [[[TextFieldTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId] autorelease];
cell.textField.tag = indexPath.row + 1;
cell.textField.delegate = self;
NSString *value = [textFieldValues objectForKey:[NSNumber numberWithInt:indexPath.row]];
if (value)
cell.textField.text = value;
else
cell.textField.text = @"";
return cell;
}
, а затем в вашем TextFieldTableViewCell.h
@property (nonatomic, readonly) UITextField *textField;
и, наконец, в вашем TextFieldTableViewCell.m
@synthesize textField;
p.s. Я бродил, что может произойти, когда редактирование textField покидает видимый диапазон ячеек, и он не используется повторно или выпущен ... дал мне озноб! Так что EndEditing должно быть адекватным.