necesito para obtener el NSIndexPath
para una celda personalizado en un UITableView
. Aquí está el problema: Envío un NSNotification
de mi celda personalizado a mi UITableViewController
cuando editingDidBegin
se llama a partir de una UITextField
en mi celda personalizado. En mi UITableViewController
, puedo cambiar el tamaño de la UITableView
cuando el UITextField
comenzó a editar, y luego quiero la vista de tabla para desplazarse a la celda en la que el UITextField
es el primero en responder. Pero no puedo encontrar la manera de devolver el indexPath
de la celda en la que se está editando el UITextField
. Lo he intentado de muchas maneras, pero todavía no está funcionando. Una forma es la siguiente: en mi clase cstomCell selecciono la fila usando [self setSelected:YES]
y en mi controlador de televisión, entonces si NSLog
la fila de [self.tableV indexPathForSelectedRow]
siempre devuelve 0 a pesar de su siempre 0. No¿Devuelve NSIndexPath desde la celda personalizada? (UITableView)
Respuesta
acaba de dar la celda un valor para es tag
propiedad. Entonces se puede obtener esa celda llamando a este
UITableViewCell *cell = (UITableViewCell *)[self.tableView viewWithTag:tagValue];
continuación, una vez que tenga la celda se puede obtener el NSIndexPath como esto
NSIndexPath *indexPath = [self.tableView indexPathForCell:nextResponderCell];
Puesto que usted tiene un UITextField en su celda personalizado puede colocar cell.textField.delegate = self;
en el método de fuente de datos
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
. De esta forma, no tendrá que configurar una NSNotification en la celda personalizada. También en este mismo método se puede etiquetar tanto sus células campo de texto como este cell.textField.tag = indexPath.row;
y la célula como esto cell.tag = indexPath.row;
Ahora que ha configurado el delegado UITextField, ahora se puede poner este método en su clase UITableViewController
- (void)textFieldDidBeginEditing:(UITextField *)textField {
CustomCell *cell = (CustomCell *)[self.tableView viewWithTag:textField.tag];
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
}
lo anterior UITextField método delegado debe conseguir que el indexPath de la celda que ha seleccionado actualmente.
me gusta etiquetar mis células, 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 manera es pasar los datos beginEditing utilizando un delegado de encargo, e incluyen un modelo de células, que luego se puede utilizar para calcular su ruta dependiendo de cómo está almacenando datos.
Salida mi proyecto github, tiene el código para manejar este caso, así como el cambio de tamaño para el teclado y la tabulación a la siguiente celda editable: https://github.com/andrewzimmer906/XCell
Su proyecto github es un desastre completo, al menos 20 errores y advertencias en la compilación. ¿Podrías proporcionarme más código, solo relacionado con mi pregunta? Tengo una recompensa abierta de 50. – JonasG
tratar 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;
}
hace esto (su respuesta que diste antes abajo) todavía funciona si tiene varias texfields en cada célula ?:
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];
Puesto que usted tiene un UITextField
en su celda personalizado se puede colocar en el método cell.textField.delegate = self;
fuente de datos
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
. También en este mismo método puede etiquetar el campo de texto de sus celdas como este cell.textField.tag = indexPath.fila; y la celda como esta cell.tag = indexPath.row;
Ahora que ha configurado el delegado UITextField, ahora se puede poner este método en su clase UITableViewController
- (void)textFieldDidBeginEditing:(UITextField *)textField {
CustomCell *cell = (CustomCell *)[self.tableView viewWithTag:textField.tag];
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
tengo un tableview con 8 células, y en cada célula tengo 6 texfields, y también el tableview es dinámico, por lo que el usuario puede insertar más celdas ... pero tengo problemas para guardar el texto que el usuario ingresa en cada texfield. ¿Es posible que con "cell.textField.tag = indexPath.row", el controlador identifique el texfield en el que estoy?
- 1. UITableView no se desplaza a la celda
- 2. indexPathForCell de UITableView: devuelve siempre 0 como indexPath.row
- 3. UITableView Detectando la última celda
- 4. UITableView ¿Detectar la celda seleccionada?
- 5. UITableView moverse a la celda
- 6. Barra de desplazamiento personalizada UITableView
- 7. ¿Cómo "presionar" programáticamente una celda UITableView?
- 8. UITableView texto de la celda Color de etiqueta
- 9. Personalizado UITableView Altura de celda dinámica
- 10. dequeueReusableCellWithIdentifier no devuelve la celda de mi tipo personalizado
- 11. Recargar celda UITableView específica en iOS
- 12. UITableView agregar celda Animación
- 13. Obtener la celda visible de UITableView pagingEnabled
- 14. Más de una celda personalizada con en la misma XIB
- 15. Animate cambio de altura de la celda en UITableView
- 16. UITableView con comportamiento similar a paginación personalizada
- 17. sombra de UILabel del color seleccionado de la celda personalizada
- 18. ¿Cómo puedo saber si un UITableView contiene un NSIndexPath específico?
- 19. Reordenación UITableView personalizada
- 20. UITableView modo de selección por celda durante la edición
- 21. UIButton en la celda UITableView como "Eliminar evento"
- 22. UITableView - Resaltar celda seleccionada [iOS]
- 23. Agregar celda a la parte inferior de UITableView en iOS
- 24. Altura de la celda UITableView dinámica basada en el contenido
- 25. UISwitch en una celda UITableView
- 26. cómo saber si uitableview tiene una celda seleccionada
- 27. crear botón de eliminación personalizada para uitableview
- 28. UITableView Cell - obtener IndexPath.row desde el botón?
- 29. ios uitableview uitable reutilización de la celda tiene datos viejos
- 30. ¿Nueva celda personalizada de XIB que causa codificación de valor de clave para la clave ...?
¿no prefieres obtener su 'frame'? – aopsfan