Allibera el teu desenvolupador d'aplicacions interior Part 21: Passar dades entre controladors

Tens una idea per a una aplicació però no tens coneixements de programació per començar a crear-la? En aquesta sèrie de blocs setmanals, us portaré, el no programador, pas a pas pel procés de creació d'aplicacions per a l'iPhone, l'iPod touch i l'iPad. Uneix-te a mi cada setmana en aquesta aventura i experimentaràs com de divertit pot ser convertir les teves idees en realitat! Aquesta és la part 21 de la sèrie. Si tot just estàs començant, fes una ullada a inici de la sèrie aquí (Aquesta publicació s'ha actualitzat a Swift 1.2, Xcode 6.4 i iOS 8) .

Ara que ja teniu una comprensió bàsica de la visualització de llistes de dades, és hora de parlar de passar informació entre els controladors de visualització. Aquest és un tema extremadament important perquè això és una cosa que haureu de fer moltes vegades a les vostres aplicacions d'iOS. En aquest post explicaré els passos principals i us ensenyaré les millors pràctiques. Per seguir-ho, podeu obtenir la versió més actualitzada del iAppsReview projecte amb el qual treballarem en aquesta publicació aquest enllaç . Per obtenir la millor experiència d'aprenentatge, us animo a seguir els passos pel vostre compte. Si teniu problemes, podeu obtenir el projecte completat aquest enllaç .



Per què necessiteu passar informació d'un controlador de visualització a un altre? figura 1 ofereix un gran exemple d'això.

Figura 1: heu de passar la categoria d'aplicació seleccionada actualment entre els controladors de visualització.

En temps d'execució, quan un usuari toca Categoria d'aplicacions fila de vista de taula a l'esquerra, el Escriu una ressenya el controlador de visualització ha de passar la categoria seleccionada actualment a Categoria d'aplicacions controlador de visualització. El Categoria d'aplicacions El controlador de visualització ha de conèixer aquesta informació perquè pugui mostrar una marca de verificació a la fila de la categoria seleccionada actualment. Per contra, quan l'usuari selecciona una categoria al Categoria d'aplicacions escena en temps d'execució, el Categoria d'aplicacions El controlador de visualització ha de tornar la categoria seleccionada recentment a Escriu una ressenya controlador de visualització de manera que la categoria seleccionada actualment es pugui mostrar a la seva vista de taula.

En el context d'aquesta discussió, el font view controller és el controlador des del qual es transmeten les dades i el destinació view controller és el controlador que està rebent les dades.

Passar dades a un controlador de visualització

Parlem de passar dades a primer un controlador de visualització. Normalment, això requereix tres passos:

  1. Creeu una propietat al controlador de la vista de destinació per contenir les dades que passa el controlador de la vista d'origen.
  2. Configureu el seguiment entre els controladors de visualització d'origen i de destinació.
  3. Al controlador de la vista font, implementeu el Prepara't per mètode i afegiu codi que emmagatzema les dades per passar a la propietat del controlador de visualització de destinació.

En aquest exemple, té sentit passar un identificador de categoria d'aplicació entre els Escriu una ressenya escena i el Categoria d'aplicacions escena.

Pas 1: creeu una propietat al controlador de visualització de destinació

El nostre primer pas és fàcil. Hem d'afegir un appCategoryID propietat al controlador de la vista de destinació, de manera que el controlador de la vista d'origen tingui un lloc per emmagatzemar l'ID de la categoria seleccionada actualment.

  1. Aneu al Navegador de projectes i seleccioneu AppCategoryViewController.swift dossier.
  2. Afegeix la declaració de propietat que es mostra a Figura 2 .
  Afegeix la propietat appCategoryID
Figura 2 - Afegeix un appCategoryID propietat a la AppCategoryViewController.swift dossier.

Pas 2: configureu la connexió entre els controladors d'origen i de destinació

Aquest segon pas també és fàcil. Només cal que especifiqueu un identificador per al seguiment entre els controladors de visualització d'origen i de destinació.

  1. Al Navegador de projectes, seleccioneu Guió.gràfic principal dossier.
  2. Feu clic a la següent entre els Escriu una ressenya i Categoria d'aplicacions escenes per seleccionar-lo.
  3. Aneu a l'inspector d'atributs (el tercer botó de la dreta a la barra d'eines de l'inspector) i configureu el segue Identificador atribuir a AppCategorySegue . Això proporciona un identificador per al segue que podem utilitzar des del nostre fitxer de codi de controlador de visualització font. Aneu molt amb compte amb l'ortografia i les majúscules i minúscules perquè heu d'utilitzar exactament el mateix nom quan el feu referència des del fitxer de codi.
  Estableix l'identificador de segue
Figura 3 - Establiu els segue's Identificador a AppCategorySegue .

Millora de l'escena de revisió d'escriptura

Abans de realitzar el tercer pas d'implementació Prepara't per mètode al controlador de vista font, hi ha una mica de neteja que hem de fer al Escriu una ressenya controlador de vista de l'escena.

Comencem afegint una nova variable d'instància a l'escena per contenir una referència a l'identificador de categoria d'aplicació seleccionat actualment.

  1. Al Navegador de projectes, seleccioneu WriteReviewViewController.swift dossier.
  2. Afegiu la propietat que es mostra a Figura 4 . Això ens proporciona un lloc per emmagatzemar l'identificador de categoria d'aplicació actual.

      Afegeix una propietat nova
    Figura 4 - Afegeix una propietat nova.
  3. En el WriteReviewViewController.swift desplaça't fins al fitxer està llest per compartir mètode. Com que no volem que l'usuari pugui desar una ressenya tret que s'hagi seleccionat una categoria d'aplicació, hem d'afegir algun codi al controlador de visualització. està llest per compartir mètode. Potser recordeu que vam crear aquest mètode en una publicació anterior. El Compartir i Publicació els botons s'activen o desactiven en funció de si aquest mètode torna veritat o fals .
  4. Si l'usuari no ha seleccionat una categoria d'aplicació, el valor d'aquesta variable serà zero. Així que afegiu el xec per un zero appCategoryID tas mostrat a Figura 5 .

      Actualitzeu el mètode isReadyToShare
    Figura 5 - Comproveu si l'usuari ha seleccionat una categoria d'aplicació.
  5. Ara donem a l'usuari una indicació visual que necessita per seleccionar una categoria d'aplicació. Al Navegador de projectes, seleccioneu Guió.gràfic principal dossier. En el Escriu una ressenya escena, feu doble clic a la part dreta de l'escena Categoria d'aplicacions fila de vista de taula per posar l'etiqueta de detall en mode d'edició. A continuació, introduïu el text Selecciona com es mostra a Figura 6 i premeu tornar .
  Estableix l
Figura 6 - Establiu el text de l'etiqueta de detall a Seleccioneu .

Pas 3: implementeu el mètode prepareForSegue:

Ara ja esteu preparat per implementar el Prepara't per mètode al controlador de vista font, que en aquest cas és WriteReviewViewController .

El Prepara't per El mètode es crida automàticament al controlador de visualització d'origen sempre que s'activa un segue. Us permet realitzar accions personalitzades abans que s'executi el seguiment al controlador de destinació. En aquest cas, el segue s'activa quan l'usuari toca Categoria d'aplicacions fila de vista de taula a la fila Escriu una ressenya escena.

  1. Al Navegador de projectes, seleccioneu WriteReviewViewController.swift dossier.
  2. Afegiu el mètode que es mostra a Figura 7 directament a sota del viewDidLoad mètode.
  Afegiu el mètode prepareForSegue
Figura 7 - El Prepara't per codi del mètode

Com podeu veure, el Prepara't per es passa una referència al mètode Seguiu que es va desencadenar. El codi d'aquest mètode realitza els passos següents, que són molt típics per a mètodes d'aquest tipus:

  • La primera línia de codi comprova les seguents identificador propietat per assegurar-nos que la segue que ens interessa era la que es va activar (podeu tenir diverses segues per a un controlador de visualització).
  • La segona línia de codi obté una referència al controlador de destinació del segue destinationViewController propietat.
  • La tercera línia de codi emmagatzema l'identificador de categoria d'aplicació actual al controlador de visualització de destinació appCategoryID propietat.

Un cop s'executa aquest mètode, s'executa automàticament el seguiment al controlador de destinació.

Millora del controlador de visualització de categoria d'aplicacions

Ara que el Escriu una ressenya el controlador de visualització està passant l'identificador de categoria d'aplicació seleccionat actualment a la Categoria d'aplicacions veure el controlador, afegim una mica de codi al fitxer Categoria d'aplicacions controlador de visualització que col·loca una marca de verificació al costat de la categoria seleccionada actualment a la vista de taula.

  1. Al Navegador de projectes, seleccioneu AppCategoryViewController.swift dossier.
  2. Afegeix el oldIndexPath propietat mostrada a Figura 8 . Aquesta propietat ens permet fer un seguiment de l'últim element seleccionat (d'aquí a una estona veuràs per què ho necessitem).

      Afegiu la propietat oldIndexPath
    Figura 8 - Crear un oldIndexPath variable d'instància.
  3. Ara afegiu el codi que es mostra a Figura 9 fins al tableView:cellForRowAtIndexPath: mètode.
  Estableix la marca de verificació a la cel·la
Figura 9 - Codi que estableix una marca de verificació a la categoria d'aplicació seleccionada actualment

Recordeu que el tableView:cellForRowAtIndexPath: El mètode es crida una vegada per a cada cel·la d'una vista de taula. El codi que acabeu d'afegir comprova si l'identificador del AppCategoryEntity associat a la cel·la actual és el mateix que l'identificador de categoria seleccionat actualment. Si és així, s'afegeix una marca de verificació a la cel·la i el camí de l'índex de la cel·la s'emmagatzema al fitxer oldIndexPath variable d'instància per a un ús posterior. Si no és el mateix, el AccessoryType de la cel·la s'estableix en 'Cap'. Necessites això altra cosa declaració perquè la categoria seleccionada anteriorment estigui desmarcada.

Devolució de dades des d'un controlador de visualització

Per completar la funcionalitat per seleccionar una categoria d'aplicació, ara hem de retornar la categoria seleccionada actualment de la Categoria d'aplicacions escena a la Escriu una ressenya escena, de manera que pugui mostrar la categoria seleccionada recentment a l'etiqueta de detall de la Categoria d'aplicacions vista de taula ( figura 1 ).

La millor manera de tornar aquesta informació és crear un mètode a WriteReviewViewController que es pot anomenar AppCategoryViewController . Tanmateix, abans de crear aquest mètode, hem de pensar una mica endavant. Com es mostra a Figura 10 , hi ha dues escenes diferents a l'aplicació que segueixen a Categoria d'aplicacions escena—la Escriu una ressenya escena i el Ressenyes en línia escena.

  Dues escenes segueixen l'escena de la categoria d'aplicacions
Figura 10 - El Escriu una ressenya i Ressenyes en línia ambdues escenes segueixen a la Categoria d'aplicacions escena.

Això vol dir que hem d'elaborar un esquema per retornar la categoria seleccionada actualment que funcioni bé tant per a Escriu una ressenya i Ressenyes en línia escena. Aquí és on un Swift protocol pot venir al rescat!

Fora de l'àmbit del programari, la paraula protocol es defineix com:

El codi de conducta establert en qualsevol grup, organització o situació.

Aquesta definició no està lluny de la marca quan es tracta de protocols a Swift. Els protocols s'utilitzen per definir un conjunt estàndard de comportament. En la nostra situació, necessitem Escriu una ressenya i Ressenyes en línia visualitza els controladors per tenir un mètode de devolució de trucada estàndard que pot utilitzar el Categoria d'aplicacions visualitza el controlador per tornar el seleccionat actualment AppCategoryEntity . Per fer-ho, podem tenir el Categoria d'aplicacions view controller declara un protocol que pot ser adoptat pel Escriu una ressenya i Ressenyes en línia visualitza els controladors.

Figura 11 ofereix una visió general dels cinc passos principals que heu de realitzar sempre que necessiteu tornar informació d'un controlador de visualització a un altre. En aquest context, el Escriu una ressenya i Ressenyes en línia els controladors de visualització s'anomenen presentant controlador de visualització i el Categoria d'aplicacions el controlador de visualització es coneix com a presentat controlador de visualització.

  Passos de retorn de trucada
Figura 11 - Creació d'un mètode de devolució de trucada per tornar dades des d'un controlador de vista

Aquests són els detalls d'aquests passos:

  1. Declarar un protocol al presentat controlador de visualització que especifica un mètode que pot ser implementat per presentant controlador de visualització. El presentat view controller utilitzarà aquest mètode en temps d'execució per tornar les dades a presentant controlador de visualització.
  2. Declarar a delegat propietat a la presentat controlador de visualització que mantindrà una referència a presentant controlador de visualització. El presentat view controller utilitzarà aquesta referència al presentant controlador de visualització quan crida al mètode de protocol en aquest controlador de vista.
  3. Afegeix el codi al presentat controlador de visualització que crida al mètode del protocol, passant dades al presentant controlador de visualització.
  4. Adoptar el protocol de la presentant visualitza el controlador i implementa el mètode amb codi que fa alguna cosa amb les dades que se li retornen.
  5. En el presentant veure els controladors Prepara't per mètode, tenen el presentant el controlador de visualització emmagatzema una referència a si mateix al fitxer presentat veure els controladors delegat propietat.

Ara ja esteu preparat per implementar aquests passos per actualitzar Categoria d'aplicacions fila de vista de taula a la fila Escriu una ressenya escena.

Pas 1: declara un protocol al controlador de vista presentat

  1. Al Navegador de projectes, seleccioneu AppCategoryViewController.swift dossier.
  1. Afegeix el AppCategoryDelegate declaració de protocol que es mostra a Figura 12 .
  Declaració de protocol
Figura 12 - El AppCategoryDelegate declaració de protocol

Aquest protocol declara un únic mètode, updateAppCategory: que accepta una referència a un AppCategoryEntity objecte. Aquest és el mètode que el Escriu una ressenya i Ressenyes en línia els controladors de visualització han d'implementar de manera que Categoria d'aplicacions el controlador de visualització pot tornar el seleccionat actualment AppCategoryEntity .

Pas 2: declara una propietat de delegat al controlador de vista presentat

Més avall a la AppCategoryViewController.swift fitxer, declareu la propietat del delegat que es mostra a Figura 13.

  Propietat del delegat
Figura 13 - Afegiu una propietat de delegat al fitxer AppCategoryViewController.swift dossier.

Aquesta propietat s'utilitzarà per mantenir una referència al controlador de visualització de presentació.

Pas 3: truca al Mètode de protocol al delegat

Ara hem d'afegir codi al fitxer Categoria d'aplicacions controlador de visualització que crida al mètode de protocol al delegat (el controlador de visualització que presenta) quan l'usuari selecciona una nova categoria d'aplicació.

  1. Al Navegador de projectes, seleccioneu AppCategoryViewController.swift dossier.
  2. Desplaceu-vos fins al final del fitxer i suprimiu tot el codi comentat.
  3. Afegeix el tableView:didSelectRowAtIndexPath: mètode que es mostra a Figura 14 abans de la clau de tancament de la classe.
  mètode didSelectRowAtIndexPath
Figura 14 - Afegiu el codi al fitxer tableView:didSelectRowAtIndexPath mètode.

Aquí teniu el desglossament del que fa el codi d'aquest mètode:

  • La primera línia de codi deselecciona la fila seleccionada actual. Si no ho feu, la fila romandrà destacada en blau després que l'usuari la toqui.
  • La cel·la que s'ha marcat anteriorment està desmarcada. El valor en el oldIndexPath La variable s'utilitza per determinar la cel·la seleccionada prèviament.
  • S'afegeix una marca de verificació a la cel·la seleccionada actualment.
  • Les cel·les seleccionades actualment indexPath es guarda per a un ús posterior.
  • El updateAppCategory: es crida al mètode a l'objecte delegat (el controlador de la vista de presentació), passant una referència a AppCategoryEntity objecte associat a la cel·la seleccionada actualment.

Pas 4: adopteu el protocol al controlador de visualització de presentació

Ara que heu configurat el controlador de visualització presentat, és hora d'implementar el protocol al controlador de visualització de presentació.

  1. Al Navegador de projectes, seleccioneu WriteReviewViewController.swift dossier.
  2. Adopta el AppCategoryDelegate protocol tal com es mostra a Figura 15 . Com podeu veure, una sola classe pot adoptar molts protocols diferents.

      Implementar el protocol
    Figura 15 - Adopció de la AppCategoryDelegate protocol Ara hem d'implementar el updateAppCategory: mètode que es declara al AppCategoryDelegate protocol. Però abans de fer-ho, necessitem una manera d'obtenir una referència a Categoria d'aplicacions cel·la de vista de taula a la cel·la Escriu una ressenya escena. La millor manera de fer-ho és crear una sortida per a la cèl·lula.
  3. Per fer-ho, primer seleccioneu Guió.gràfic principal fitxer al Navegador de projectes i, a continuació, visualitzeu l'Assistent Editor fent clic al botó central de l' Editor grup de botons a la barra d'eines a la part superior de la finestra Xcode.
  4. Feu clic a la barra d'estat a la part superior de la Escriu una ressenya escena per seleccionar el controlador de visualització. Això hauria de mostrar automàticament el WriteReviewViewController.swift fitxer a l'Assistent Editor. Si no és així, feu clic a Manual botó a la barra de salt a la part superior de l'Assistent Editor i seleccioneu Automàtic > WriteReviewViewController.swift des del menú emergent.
  5. Sostén el Control premeu la tecla, feu clic a Categoria d'aplicacions cel·la i arrossegueu el punter del ratolí cap avall fins al final de la llista de propietats a l'Assistent Editor. Quan el Insereix Outlet o Outlet Collection apareix una finestra emergent ( Figura 16 ) deixa anar el Control tecla i botó del ratolí.

      Creeu la presa cel·lular
    Figura 16: creeu una sortida per a la cel·la de vista de taula.
  6. A la finestra emergent Crea una connexió, configureu el nom a appCategoryCell i, a continuació, feu clic a Connecta't botó. Això afegeix una nova propietat de sortida al fitxer de capçalera.

      Nom de sortida
    Figura 17 - Anomena la presa appCategoryCell .
  7. Ara podeu tancar l'Assistent Editor fent clic al botó de l'esquerra a Editor grup de botons a la part superior de la finestra Xcode.
  8. Ara ja esteu preparat per implementar el mètode de protocol al controlador de visualització de presentació. Per fer-ho, primer seleccioneu WriteReviewViewController.swift fitxer al Navegador de projectes. Després, afegiu el nou updateAppCategory mètode que es mostra a Figura 18 just a sota del Prepara't per mètode.
  mètode updateAppCategory
Figura 18 - Afegiu el updateAppCategory mètode de protocol a la WriteReviewViewController.swift dossier.

Aquí teniu el desglossament d'aquest codi:

  • Aquest mètode accepta un AppCategoryEntity objecte que es passa des del controlador de vista presentat.
  • Pren el valor en el de l'entitat ID categoria propietat i l'emmagatzema al appCategoryID variable d'instància.
  • També rep el nom de la categoria del nom propietat de l'entitat i actualitza l'etiqueta de text de detall de la Categoria d'aplicacions cel·la de vista de taula.
  • L'última línia de codi indica a la vista de la taula que torni a carregar les seves dades, la qual cosa actualitza la visualització de la cel·la de la vista de la taula per reflectir la nova categoria.

Pas 5: deseu una referència al controlador de visualització de presentació a la propietat del delegat

Ara ja estàs preparat per al pas final. Hem d'emmagatzemar una referència a presentant controlador de visualització (el Escriu una ressenya controlador de visualització) al presentat veure els controladors delegat propietat. Un lloc fantàstic per fer-ho és al Prepara't per mètode.

  1. En el Prepara't per mètode de la WriteReviewViewController.swift fitxer, afegiu el codi que es mostra a Figura 20 .

      Estableix el delegat
    Figura 20: emmagatzema una referència al controlador de vista presentat a la propietat delegat del controlador de vista presentat.
  2. Mentre estem aquí, també hauríem de canviar postrevisió: mètode per desar la categoria d'aplicació seleccionada. Desplaceu-vos cap amunt fins a postrevisió: mètode i canvieu la segona línia de codi tal com es mostra a Figura 20 .
  actualitzar la categoria de l'aplicació
Figura 20: emmagatzema l'identificador de categoria d'aplicació seleccionat al fitxer ReviewEntity objecte.

Prova el nou codi

Ara ja esteu preparat per prendre el codi per fer una prova de conducció!

  1. Feu clic a Xcode's Correr botó. Quan l'aplicació aparegui al Simulador, seleccioneu Escriu una ressenya opció. Hauries de veure el Categoria d'aplicacions el text detallat de la fila està establert a Seleccioneu ( Figura 21 ).
      Escriu una ressenya en temps d'execució
    Figura 21 - El Categoria d'aplicacions el text detallat de la fila està establert a Seleccioneu .
  2. Feu clic a Categoria d'aplicacions fila per navegar a Categoria d'aplicacions escena. No hi hauria d'haver cap categoria amb una marca de verificació al costat. Feu clic a una de les categories i haureu de veure una marca de verificació al costat. Si feu clic a una altra fila, la marca de verificació hauria de desaparèixer de la fila anterior i apareixerà a la nova fila seleccionada tal com es mostra a Figura 22 . Això és causat pel codi que s'està executant al controlador de vista tableView:didSelectRowAtIndexPath: mètode.

      Marca de verificació a la fila
    Figura 22: hauria d'aparèixer una marca de verificació a la fila seleccionada.
  3. Ara feu clic al botó enrere (etiquetat Escriu una ressenya ) a l'extrem superior esquerre de la vista per tornar a navegar Escriu una ressenya escena. Hauríeu de veure la categoria que heu seleccionat per darrera vegada a Categoria d'aplicacions etiqueta de detall tal com es mostra a Figura 23 !
  Text de detall actualitzat
Figura 23 - La nova categoria seleccionada que es mostra al fitxer Categoria d'aplicacions fila

Conclusió

Vam cobrir molts territoris aquí, però volia presentar tota aquesta informació en una única publicació perquè pugueu veure tot el procés de pas d'informació als controladors de visualització. Durant el procés, heu après una aplicació pràctica per als protocols Swift, així com com mostrar una marca de verificació en una fila de vista de taula. Us recomano seguir aquests passos unes quantes vegades per assegurar-vos que enteneu els conceptes importants d'iOS descrits aquí.

< Següent>>