¿Devuelve NSIndexPath desde una celda personalizada? (UITableView)

Necesito get el NSIndexPath para una celda personalizada en un UITableView . Este es el problema: envío una NSNotification desde mi celda personalizada a mi UITableViewController cuando se llama a UITextField desde un UITextField en mi celda personalizada. En mi UITableViewController , cambio el tamaño de UITableView cuando UITextField comenzó a editar, y luego quiero que la vista de tabla se desplace a la celda en la que UITextField responde por primera vez. Pero no puedo descubrir cómo devolver el indexPath de la celda donde se está editando el UITextField . He intentado de muchas maneras, pero aún no funciona. Una forma es la siguiente: en mi class cstomCell, selecciono la fila usando [self setSelected:YES] y en mi controller de TV, si I NSLog la fila de [self.tableV indexPathForSelectedRow] siempre devuelve 0 aunque no siempre sea 0.

Simplemente déle a la celda un valor por su propiedad de tag . Entonces puedes get esa celda llamando a esto

 UITableViewCell *cell = (UITableViewCell *)[self.tableView viewWithTag:tagValue]; 

una vez que tienes la celda puedes get el NSIndexPath como este

 NSIndexPath *indexPath = [self.tableView indexPathForCell:nextResponderCell]; 

Como tienes un UITextField en tu celda personalizada, puedes colocar cell.textField.delegate = self; en el

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

método fuente de datos De esta forma, no tendrá que configurar una NSNotification en la celda personalizada. También en este mismo método puede labelr el campo de text de su celda como esta cell.textField.tag = indexPath.row; y la celda como esta cell.tag = indexPath.row;

Ahora que ha configurado el delegado UITextField, ahora puede ubicar este método en su class UITableViewController

 - (void)textFieldDidBeginEditing:(UITextField *)textField { CustomCell *cell = (CustomCell *)[self.tableView viewWithTag:textField.tag]; NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; } 

El método de delegado UITextField anterior debe get el path index para la celda que ha seleccionado actualmente.

testing este código …

 - (void)textFieldDidBeginEditing:(UITextField *)textField { UITableView *tableView; UITableViewCell* superViewCell = [self returnSuperCellViewOfTextField:textField]; if(superViewCell)[tableView scrollToRowAtIndexPath:[tableView indexPathForCell:superViewCell] atScrollPosition:UITableViewScrollPositionMiddle animated:YES]; } -(id)returnSuperCellViewOfTextField:(id)viewToCheck { id superView = [viewToCheck superview]; if([viewToCheck isKindOfClass:[UITableViewCell class]] && superView)return superView; else if(([viewToCheck respondsToSelector:@selector(superview)] && superView)) return [self returnSuperCellViewOfTextField:superView]; return nil; } 

¿Esto todavía funciona (su respuesta que dio antes abajo) aún funciona si tiene varios campos de text en cada celda ?:

 UITableViewCell *cell = (UITableViewCell *)[self.tableView viewWithTag:tagValue]; then once you have the cell you can get the NSIndexPath like this NSIndexPath *indexPath = [self.tableView indexPathForCell:nextResponderCell]; 

Como tienes un UITextField en tu celda personalizada, puedes colocar cell.textField.delegate = self; en el

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

método fuente de datos También en este mismo método puede labelr el campo de text de su celda como esta cell.textField.tag = indexPath.row; y la celda como esta cell.tag = indexPath.row;

Ahora que ha configurado el delegado UITextField, ahora puede ubicar este método en su class UITableViewController

 - (void)textFieldDidBeginEditing:(UITextField *)textField { CustomCell *cell = (CustomCell *)[self.tableView viewWithTag:textField.tag]; NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 

Tengo una vista de tabla con 8 celdas, y en cada celda tengo 6 texfields, y también la tablaview es dinámica, por lo que el usuario puede insert más celdas … pero estoy teniendo problemas para save el text que ingresa el usuario. cada texfield. ¿Es posible que con "cell.textField.tag = indexPath.row", el controller identifique el campo de text en el que estoy?

Me gusta labelr mis celdas así:

 /* Create a tag based on the section and row of a cell(used to retrive the cell for the beginEditingNextCell method. */ -(NSInteger)tagForIndexPath:(NSIndexPath*)path { return path.section * 1000 + path.row + 1; } 

La otra forma es pasar los datos beginEditing usando un delegado personalizado, e include un model de celda, que luego puede usar para descubrir su ruta dependiendo de cómo esté almacenando datos.

Echa un vistazo a mi proyecto github, tiene el código para manejar este caso, así como cambiar el tamaño del keyboard y tabulación a la siguiente celda editable: https://github.com/andrewzimmer906/XCell