2011-07-22 12 views
8

Tengo una UITableView de clientes donde se selecciona una fila/cliente. El usuario puede presionar otra vista en la pila UINavigationController para agregar un nuevo cliente. Cuando abro la pantalla secundaria y regreso a UITableView, ya no se selecciona la fila seleccionada anteriormente.¿Cómo mantengo la fila UITableView seleccionada cuando regreso de una pantalla secundaria UINavigationController?

Puedo volver a seleccionar la fila en viewDidAppear() pero se ve mal, ya que puede ver la anulación de selección y la selección. ¿Hay alguna manera de mantener la fila seleccionada cuando regresas de la pantalla secundaria?

+0

Y por seleccionado, ¿quieres decir resaltado? – Legolas

+0

Para el interés de la semántica, la API llama al estado que ChrisP quiere como "seleccionado". El aspecto visual es lo más destacado, pero Apple se refiere a él como una selección. por ejemplo, 'setSelected:', 'didSelectRowAtIndexPath:' etcétera. –

Respuesta

0

De manera predeterminada, una fila seleccionada se deselecciona (con animación) cuando regresa a ese VC.
Por lo tanto, si presiona DetailViewController, la celda permanece seleccionada hasta que regrese al RootViewController y luego se deselecciona automáticamente.

Yo solía tener un problema así. Asegúrese de llamar siempre a la implementación de la superclase de métodos como viewWillAppear, viewWillDisappear, etc.
Además, no llame deselectRowAtIndexPath: manualmente.

-1

No se puede seleccionar tableViewCell todo el tiempo. Vuelve a la normalidad una vez que cumple su función. Creo que se refería al resaltado o parece que se seleccionó, y estoy respondiendo la pregunta según eso.

Obtenga la fila que se seleccionó en el cellForRowAtIndexPath. Cuando abre su controlador de navegación y vuelve a TableView, vaya al cellForRowAtIndexPath y tenga esa celda resaltada (Puede usar cualquier UIColor como desee) - no hay una manera específica de resaltar cosas - use su imaginación - El estilo de resaltado predeterminado es Azul, mientras que el texto es blanco.

¿Cómo se hace esto?

  1. Encuentra elija la fila en cellForRowAtIndexPath
  2. tienda está en una variable externa/o NSUserDefaults y también se puede utilizar para la comunicación entre NSUserDefaults pantalla para averiguar si el artículo se metió de esa pantalla.
  3. [tableView reloadData] en viewWillAppear
  4. Comprobar si el valor NSUserDefaults en cellForRowAtIndexPath y modificar esa celda con cell.backgroundColor o algo así.
+0

Esto es incorrecto. Mire mi respuesta para ver cómo resaltar las celdas de la vista de tabla y permanecer resaltadas en las transiciones de página. –

0

es necesario llamar a:

[tableView deselectRowAtIndexPath:indexPath animated:YES]; 

esto se encuentra en el método delegado didSelectRowAtIndexPath para un UITableView.

+4

¿Cómo ayuda esto a resolver el objetivo de tener seleccionada la fila cuando el usuario regresa de la vista secundaria a la vista maestra? ¿Esto no causaría que la fila no sea seleccionada? – ChrisP

1

Si lo selecciona en viewWillAppear :, debe seleccionarse sin que el usuario lo vea. ¿Eso resolvería tu problema?

+0

Eso es lo que probé y la re-selección es visible para el usuario. Quiero que la vista se muestre con la fila ya seleccionada, como cuando el usuario abandonó la pantalla para acceder a la pantalla secundaria. – ChrisP

-3

Sin algo de código, sólo puede dar un consejo: dejar de usar [tableView reloadData], utilice [tableView beginUpdates], [tableView endUpdates] y – insertRowsAtIndexPaths:withRowAnimation: y – reloadRowsAtIndexPaths:withRowAnimation:. Las cosas deberían funcionar como se esperaba.

21

Supongo que está utilizando un controlador de vista de tabla, ya que de lo contrario es su responsabilidad escribir este comportamiento de todos modos. En un controlador de vista de tabla, sin embargo, es fácil.Sólo tiene que añadir en viewDidLoad:

self.clearsSelectionOnViewWillAppear = NO; 

que mantendrá la fila seleccionada, a menos que se anula la selección manual de la fila o el usuario selecciona otra fila en la tabla.

0

Esto es posible:

Sólo una vez que el caso: Si tiene el contenido estático en tableView,

just reload the TableView in ViewDidLoad only, not in View will Appear. 


whereas make sure, you don't allow table to reload anywhere in same class in any method. Then you can achieve what you want. 

La célula conseguir anular la selección debido a recargar la tableView.

Pero para el contenido dinámico, es necesario utilizar el método delegado:

- (void)selectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UITableViewScrollPosition)scrollPosition; 

En ello, tiene que pasar el indexPath que desea mostrar seleccionado con el scrollPostion mismo que tableviewposition.

Cuestiones relacionadas