Pasando datos entre los controladores en Swift

Acerca de Swift

Swift es un increíble lenguaje de programación que Apple introdujo durante la WWDC 2014, y ahora casi todos los desarrolladores de Apple lo están utilizando para programar aplicaciones de iOS y OS X. Es muy flexible, más fácil de usar que su predecesor Objective C, y le ahorrará unos minutos preciosos al codificar con XCode.

Este es un lenguaje de programación potente e intuitivo para iOS, OS X, tvOS y watchOS. Escribir código Swift es interactivo y divertido, la sintaxis es concisa pero expresiva, y Swift incluye características modernas que encantan a los desarrolladores. Si aún no está utilizando Swift, consulte algunos de nuestros otros excelentes tutoriales en el idioma de Swift:

Acerca de este tutorial

La mayoría de las veces, cuando crea una aplicación iOS con más de una pantalla, necesita pasar datos entre sus controladores de vista para que puedan compartir contenidos sin perderlos en el camino. En este tutorial, aprenderás cómo hacerlo. Utilizaremos un Cuerda, un Entero, y también un UIImage, así que sigue leyendo: te sorprenderás de lo fácil que es este trabajo con Swift.

La configuración del proyecto XCode

En primer lugar, crea un nuevo proyecto XCode. Escoger Solicitud de vista única y nombra el proyecto como quieras. Encontrarás un ViewController.swift archivo en la lista de archivos en el panel del lado izquierdo y una interfaz de controlador en el Storyboard.

Comience arrastrando un nuevo controlador de vista desde la biblioteca de objetos a su guión gráfico.

Inserta tu primer controlador en un Controlador de navegación, así que cuando presiona el siguiente controlador, la barra superior mostrará un valor predeterminado Espalda botón. Ahora seleccione el primer controlador en Storyboard y haga clic en Editor > Incrustar en ... > Controlador de navegación.

Ahora agregue un UILabel y un UIButton al controlador. Puede encontrarlos en la biblioteca de objetos y arrastrarlos a su primer controlador. Luego haga doble clic en el UILabel y escriba el texto que desea pasar al segundo controlador. Acabo de configurar su texto a "Texto para pasar".

En el segundo controlador, arrastre un nuevo UILabel En cualquier lugar que desee y simplemente deje el texto como está..

Ahora tenemos que crear una nueva .rápido Archivo y adjuntarlo a nuestro segundo controlador. Entonces, haga clic derecho en el panel de lista de archivos a la izquierda, haga clic en Archivo nuevo… , seleccionar Clase de Cocoa Touch desde el Fuente iOS categoría, haga clic Siguiente, y nombre el nuevo controlador de vista SecondVC. (No se permiten espacios en el nombre y debe comenzar con una letra mayúscula).

Ahora tienes que vincular el segundo Controlador en el Guión Gráfico con tu nuevo SecondVC.swift expediente. Seleccione el círculo amarillo en la parte superior del controlador, haga clic en el Identificar inspector icono de panel en el lado derecho de la ventana XCode, y escriba el nombre de su nuevo .rápido archivo en el Clase y StoryboardID campos.

Conexión de vistas a los archivos .swift

Dividir la ventana XCode en dos partes haciendo clic en el Editor asistente Botón en la esquina superior derecha. Ahora tendrás el Storyboard a la izquierda y su relevante .rápido archivo en el lado derecho.

Conecta el UILabel como un IBOutlet y el UIButton como un IBAcción para usted .rápido archivo manteniendo pulsado el botón derecho del ratón (o Controlar tecla y el botón del ratón) sobre esas vistas y arrastrando la línea azul justo debajo de la clase declaración.

Cuando suelta el mouse, puede asignar un nombre a la salida de la etiqueta y a la acción del botón en la pequeña ventana emergente gris que aparece. Para el botón, asegúrese de hacer clic en el pequeño cuadro combinado que dice Salida y cambiarlo en Acción, Porque necesitamos que sea una función, no una salida..

Una vez que haya terminado de conectar todas las vistas, mantenga la ventana XCode dividida en dos secciones y seleccione el primer controlador del Storyboard. Ahora el lado derecho mostrará el ViewController.swift Archivo y estará listo para escribir un código en él.

Vamos a codificar!

Coloque el siguiente código en el goButton () método.

deje myVC = storyboard? .instantiateViewControllerWithIdentifier ("SecondVC") como! SecondVC myVC.stringPassed = myLabel.text! navigationController? .pushViewController (myVC, animated: true)

La primera línea instancia la SecondVC controlador desde el Storyboard. 

La segunda línea es en realidad el núcleo de este tutorial, porque asigna el MyLabelel texto a la UILabel hemos colocado en el SecondVC controlador. Lo hace estableciendo un Cuerda que vamos a declarar mas tarde.

Entonces, finalmente, simplemente empujamos la vista al siguiente controlador..

Pasando una cadena

Ahora seleccione el otro controlador en Storyboard y agregue esta variable justo debajo de SecondVCdeclaración de clase de

var stringPassed = ""

Haga que la aplicación asigne el valor de esta variable a segunda etiqueta Con la siguiente línea de código en el viewDidLoad () método.

secondLabel.text = stringPassed

Has terminado Ejecute la aplicación en el simulador de iOS o en un dispositivo real, toque IR! y deberías conseguir algo como esto:

Como puedes ver, la Texto para pasar Cuerda ha sido pasado con éxito a nuestro SecondVC controlador.

Pasando un entero

Ahora intentemos agregar un enteroEn t en Swift) y compartirlo entre los dos controladores. 

Agregue la siguiente variable a la ViewController.swift, justo debajo de la MyLabel Declaración de Outlet.

var myInt = Int ()

Inicializa su valor en viewDidLoad ():

anular func viewDidLoad () super.viewDidLoad () myInt = 5

A continuación, edite el goButton () función mediante la adición de una instancia que también pasará nuestra myInt Valor para el siguiente controlador, como sigue:

deja myVC = storyboard? .instantiateViewControllerWithIdentifier ("SecondVC") como! SecondVC myVC.stringPassed = myLabel.text! myVC.intPassed = myInt navigationController? .pushViewController (myVC, animated: true)

Ahora entra en SecondVC.swift y primero agrega una variable de tipo En t Eso obtendrá el número que enviaremos desde el primer controlador. Coloque esta línea de código justo debajo de la stringPassed variable.

var intPassed = Int ()

Editar el segunda etiqueta línea de código como sigue:

secondLabel.text = stringPassed + "my Int: \ (intPassed)"

Eso es todo. Ejecuta la aplicación otra vez y toca el IR! botón, y debería obtener algo como esto:

Así que ahora ve lo fácil que es pasar variables de un controlador a otro. Lo último que me gustaría mostrarte es cómo pasar una imagen..

Pasando una imagen

A continuación tenemos que añadir una imagen en el Bienescarpeta en XCode, una UIImageView En ambos controladores y sus variables relativas de tipo. UIImage.

Introducir el Assets.xcassets carpeta azul y crear una nueva Conjunto de imágenes.

Arrastre las imágenes 3x, 2x y 1x a sus cuadros relativos. Eres libre de usar cualquier imagen. He usado un logo de Apple solo como ejemplo.

Vuelve al primer controlador en el Guión gráfico y arrastra un UIImageView en cualquier parte de ella Adjunte su imagen a ella utilizando el panel del inspector de Atributos y configure su Modo a Ajuste de aspecto.

Ahora arrastra un nuevo UIImageView en el segundo controlador y establecer su Modo a Ajuste de aspecto. Sin embargo, no le asigne ninguna imagen, ya que pasaremos la imagen del primer controlador.!

Haga clic derecho en el mouse (o mantenga Controlar y haga clic en el botón del ratón) y arrastre una línea azul en el primer controlador .rápido archivo para declarar su UIImageView como un IBOutlet. Haz lo mismo también en el segundo controlador..

Ahora tienes que agregar un UIImage variable a la SecondVC.swift expediente. Colóquelo debajo de la intPassed variable.

var theImagePassed = UIImage ()

En viewDidLoad (), tome la imagen pasada por el primer controlador y muéstrela con imagePassed.

imagePassed.image = theImagePassed

Por último, edita el goButton () método mediante la adición de una línea de código que pasará la imagen del primer controlador a la UIImageView de la segunda. El lleno goButton () método es ahora como sigue.

deja myVC = storyboard? .instantiateViewControllerWithIdentifier ("SecondVC") como! SecondVC myVC.stringPassed = myLabel.text! myVC.intPassed = myInt myVC.theImagePassed = myImage.image! navigationController? .pushViewController (myVC, animated: true)

Ejecuta la aplicación, toca el IR! botón de nuevo, y debería ver algo como esto:

¡Gracias por seguirnos! Espero que te sorprenda lo fácil que es intercambiar variables e imágenes entre dos controladores. 

Aprende rápido

Hemos creado una guía completa para ayudarlo a aprender Swift, ya sea que esté comenzando con lo básico o si desea explorar temas más avanzados..

También puedes ver algunos de nuestros otros tutoriales en Xcode y Swift!