Я знаю, что на это ответили, но у меня была похожая проблема, и, к сожалению, я использовал теги, чтобы найти поля в ячейке табличного представления, чтобы позволить мне выложить его в InterfaceBuilder / Xcode и при этом избежать подклассов, как это1001 *
- (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath {
static NSString *AttributeCellIdentifier = @"AttributeCell";
UITableViewCell *cell;
UILabel *label;
UITextField *value;
MyAttribute *a;
switch( indexPath.section ) {
case ATTRIBUTES_SECTION:
cell = [tableView dequeueReusableCellWithIdentifier: AttributeCellIdentifier];
label = (UILabel *) [cell viewWithTag: 1];
value = (UITextField *) [cell viewWithTag: 2];
a = [attributeList objectAtIndex: indexPath.row];
label.text = a.label;
value.text = a.value;
break;
// Other sections...
}
return cell;
}
, но это означает, что я не могу использовать теги для строки, в которой находится текстовое поле. Поэтому в качестве альтернативы использованию тегов я использовал координату из текстового поля, чтобы увидеть, в какой строке он находится следующим образом:
- (void) textFieldDidEndEditing: (UITextField *) textField {
NSLog( @"Entering %s with %@", __func__, textField );
NSIndexPath *textFieldLocation = [self.tableView indexPathForRowAtPoint: [textField convertPoint:textField.bounds.origin toView: self.tableView]];
NSLog( @"- The textfield is in the cell at: %@", textFieldLocation );
if( textFieldLocation.section == ATTRIBUTES_SECTION ) {
MyAttribute *a = [attributeList objectAtIndex: textFieldLocation.row];
a.value = textField.text;
}
}
Если у меня в ячейке более одного текстового поля, я все равно могу использовать значение тега, чтобы узнать, какое из них заканчивает редактирование.
Возможно, даже разумносоздайте небольшой вспомогательный метод, который возвращает индекс табличного представления для любого представления:
- (NSIndexPath *) indexPathForView: (UIView *) view {
NSIndexPath *loc = [self.tableView indexPathForRowAtPoint: [view convertPoint: view.bounds.origin toView: self.tableView]];
return loc;
}
Это можно поместить в категорию и быть легко доступным для любого табличного представления без необходимости какого-либо кодирования.