botón de retroceso se remonta a una UITableViewController diferente de donde vino

StackOverflow https://stackoverflow.com/questions/2113387

  •  22-09-2019
  •  | 
  •  

Pregunta

Decir que tengo UITableViewController A y B. UITableViewController Ambas cargas A y B UIView C. En el botón de retroceso en C, ¿cómo me aseguro de que siempre vuelve a B, en lugar de donde vino?

Aquí está un ejemplo concreto: A = ventana de contactos en Skype iPhone. B = ventana de chats, cada fila es un historial de chat con una persona diferente C = escaparates de Chat que una conversación con la misma persona.

C se puede cargar desde A o B, pero quiero la BackButton en la ventana de Chat (C) se remonta a los chats (B) ventana solamente.

Saludos.

¿Fue útil?

Solución 4

Tengo la respuesta de grupo de google y siguió a su sugerencia, funciona:

De Sukima: Creo que (aunque no tengo ni idea real) que lo que estas aplicaciones como Skype y Beejive están haciendo es cuando la vista A quiere vista C lo hará su mensaje UITabBar para mover a los chats pestaña luego empuje en la vista detallada C. Esto es realmente mejor porque entonces el usuario verá que el punto de vista ha cambiado a través del hecho de que la barra de pestañas ha cambiado aspectos más destacados. a partir de: leí aún más el hilo stackoverflow. Ahora entiendo lo que su venta.

Otros consejos

Su va a encontrar esto difícil de implementar en gran parte porque se trata de un mal diseño de la interfaz de usuario y la API no lo soporta.

usuario esperará un botón de retroceso para llevarlos "volver" a la vista anterior al igual que en todas las demás aplicaciones que utilizan. El ir a cualquier otro punto de vista va a confundirlos con mayor razón porque no es una jerarquía, sino un bucle. Los usuarios a veces van B -> C -> B, pero otras veces, A -> C -> B -> C. (¿Cómo consiguen volver a A?)

En lugar de un botón de retroceso en C, usted debe tener un botón en el lado derecho, que siempre te lleva a B, independientemente de cómo ha llegado a C. El mismo botón en el mismo contexto siempre debe producir el mismo resultado. Los usuarios no tienen que recordar lo modo invisible que están en predecir qué acción un botón tendrá.


Edit01: (Respuesta a los comentarios más abajo)

(esto es la parte superior de la cabeza por lo que tomar con un grano de sal.) Tendrá que abandonar el uso del mando de navegación y en lugar de gestionar los puntos de vista a sí mismo. Usted tendrá que cambiar los puntos de vista a cabo a través de la barra de pestañas mediante la sustitución de la vista C para las vistas A y B en la propiedad vista de cada pestaña.

Creo que tendrá que comenzar con vista maestra que es invisible y luego añadir la barra de pestañas a eso. En el controlador de vista principal, crear atributos / salidas para cada vista. En cada punto de vista, tener un atributo / salida vinculada a la vista controlador maestro. Entonces tener el botón "atrás" (que sugieren fuertemente que la etiqueta "Chats") de método vista llamada C en A y B que a continuación llama a un método en el controlador de vista principal que (1) elimina la vista C de cualquiera de las pestañas A o pestaña B (2) activa la pestaña a la pestaña B y luego (3) cargas ver B en pestaña B.

No puedo énfasis forma torpe Creo que este diseño es. No importa si otras aplicaciones utilizan. En mi experiencia de grandes empresas son más propensos a cometer errores de interfaz debido a que sus departamentos de marketing quieren que la interfaz de usuario se vea único.

En comparación, vistazo a cómo la aplicación de teléfono maneja la misma situación. No importa qué pestaña se utiliza para hacer una llamada, favoritos, contactos, teclado, etc, todavía se vuelve que la opinión de pestaña cuando se realiza la llamada. Si desea hacer una llamada con otro método, que acaba de golpear la ficha correspondiente.

Ignorar el mal ejemplo de los demás. ¿Por qué gastar tanto tiempo y esfuerzo tratando de reproducir algún otro error?

Siempre se pueda subir de nuevo a la vista que va llamada pushViewController

Podría tener un envío B un mensaje que causa B para llamar pushViewController?
Puedo no entender su arquitectura, pero yo creo que funcionaría.

Si realmente quieres hacer esto se podría crear un método en el que empuja B C B y empuje de la A (sin animación) y llamar al método que empuja C. Por supuesto, cuando usted hace estallar C a B, A seguirá siendo debajo de ella.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top