Tengo muchas anotaciones en una vista de mapa (con rightCalloutAccessory
botones). El botón realizará una transición de esto mapview
a a tableview
. Quiero pasar tableview
un objeto diferente (que contiene datos) dependiendo de qué botón de llamada se hizo clic.
Por ejemplo: (totalmente inventado)
- anotación1 (Austin) -> pasar datos obj 1 (relevante para Austin)
- annotation2 (Dallas) -> pasar datos obj 2 (relevante para Dallas)
- annotation3 (Houston) -> pasar datos obj 3 y así sucesivamente ... (se entiende la idea)
Puedo detectar en qué botón de llamada se hizo clic.
Estoy usando prepareForSegue
: para pasar el obj de datos al destino ViewController
. Como no puedo hacer que esta llamada tome un argumento adicional para el obj de datos que necesito, ¿cuáles son algunas formas elegantes de lograr el mismo efecto (obj de datos dinámicos)?
Cualquier consejo sería apreciado.
ios
xcode
uitableview
mapkit
storyboard
chizzle
fuente
fuente
Respuestas:
Simplemente tome una referencia al controlador de vista de destino en el
prepareForSegue:
método y pase los objetos que necesite allí. Aquí hay un ejemplo ...REVISIÓN: También puede usar el
performSegueWithIdentifier:sender:
método para activar la transición a una nueva vista basada en una selección o presionando un botón.Por ejemplo, considere que tenía dos controladores de vista. El primero contiene tres botones y el segundo necesita saber cuál de esos botones ha sido presionado antes de la transición. Puede conectar los botones a un
IBAction
en su código que usa unperformSegueWithIdentifier:
método, como este ...EDITAR: la aplicación de demostración que adjunté originalmente ahora tiene seis años, así que la eliminé para evitar confusiones.
fuente
[vc setMyObjectHere:object];
esto dinámicamente. es decir, obj1 para button1, obj2 para button2 El problema es que no puedo pasar una discusión. ¿Hay alguna forma de evitar esto?A veces es útil evitar crear una dependencia en tiempo de compilación entre dos controladores de vista. Así es como puede hacerlo sin preocuparse por el tipo de controlador de vista de destino:
Entonces, siempre que su controlador de vista de destino declare una propiedad pública, por ejemplo:
puede establecer esta propiedad en el controlador de vista anterior como lo describí anteriormente.
fuente
setMyData:
. Eso es una dependencia. El hecho de que utilice un selector para evitar el error de compilación debe tratarse como una debilidad de su enfoque, no como un beneficio. Es sorprendente para mí cuántos desarrolladores han perdido el concepto de que los errores de tiempo de compilación deberían preferirse a los errores de tiempo de ejecución.En Swift 4.2 haría algo así:
fuente
Tengo una clase de remitente , como esta
Yo uso esta clase de remitente para pasar objetos a
prepareForSeque:sender:
fuente
prepareForSegue
o lo estamos implementando y se supone que prepareForSegue se llama a sí mismo, es decir, no necesitamos hacer algo como[self prepareForSegue]
Encontré esta pregunta cuando intentaba aprender cómo pasar datos de un controlador de vista a otro. Sin embargo, necesito algo visual para ayudarme a aprender, por lo que esta respuesta es un complemento de las otras que ya están aquí. Es un poco más general que la pregunta original, pero se puede adaptar al trabajo.
Este ejemplo básico funciona así:
La idea es pasar una cadena desde el campo de texto en el Primer controlador de vista a la etiqueta en el Segundo controlador de vista.
Primer controlador de vista
Segundo controlador de vista
Recuerda
UITextField
y elUILabel
.Fuente
Cómo enviar datos a través de segue (swift) (tutorial de YouTube)
Ver también
Ver controladores: pasar datos hacia adelante y pasar datos hacia atrás (respuesta más completa)
fuente
Para Swift use esto,
fuente
Implementé una biblioteca con una categoría en UIViewController que simplifica esta operación. Básicamente, establece los parámetros que desea pasar en un NSDictionary asociado al elemento de la IU que está realizando la segue. Funciona también con segues manuales.
Por ejemplo, puedes hacer
para un segue manual o cree un botón con un segue y use
Si el controlador de vista de destino no es compatible con la codificación de valores clave para una clave, no sucede nada. También funciona con valores-clave (útil para desenrollar segues). Compruébalo aquí https://github.com/stefanomondino/SMQuickSegue
fuente
Mi solución es similar.
fuente
Solo usa esta función.
fuente
Utilicé esta solución para poder mantener la invocación del segue y la comunicación de datos dentro de la misma función:
Un caso de uso sería algo como:
Esto parece funcionar para mí, sin embargo, no estoy 100% seguro de que las funciones de realizar y preparar siempre se ejecuten en el mismo hilo.
fuente