Kas teil on rakenduse idee, kuid teil pole selle loomise alustamiseks programmeerimisteadmisi? Selles iganädalases ajaveebisarjas tutvustan teid, kes pole programmeerija, samm-sammult läbi iPhone'i, iPod touchi ja iPadi jaoks rakenduste loomise protsessi. Liituge minuga igal nädalal sellel seiklusel ja kogete, kui lõbus võib olla oma ideede ellu viimine! See on sarja 21. osa. Kui olete alles alustamas, vaadake sarja algus siin (Seda postitust on värskendatud versioonidele Swift 1.2, Xcode 6.4 ja iOS 8) .
Nüüd, kui teil on põhiteadmised andmete loendite kuvamisest, on aeg rääkida teabe edastamisest vaatekontrollerite vahel. See on äärmiselt oluline teema, sest seda peate oma iOS-i rakendustes mitu korda tegema. Selles postituses kirjeldan peamisi samme ja õpetan teile parimaid tavasid. Järgimiseks saate hankida selle kõige ajakohasema versiooni iAppsReview projekt, millega me selles postituses töötame alates see link . Parima õppimiskogemuse saamiseks soovitan teil need sammud iseseisvalt läbi töötada. Kui jääte hätta, saate valminud projekti aadressilt see link .
Miks on vaja teavet ühelt vaatekontrollerilt teisele edastada? Joonis 1 annab selle kohta suurepärase näite.
![]() |
Joonis 1 – peate edastama praegu valitud rakenduse kategooria vaatekontrollerite vahel. |
Käitusajal, kui kasutaja puudutab nuppu Rakenduse kategooria tabelivaate rida vasakul, Kirjuta ülevaade vaatekontroller peab parajasti valitud kategooria edastama Rakenduse kategooria vaatamise kontroller. The Rakenduse kategooria vaatekontroller peab seda teavet teadma, et kuvada hetkel valitud kategooria real linnuke. Ja vastupidi, kui kasutaja valib kategooria Rakenduse kategooria stseen jooksuajal, Rakenduse kategooria vaatekontroller peab äsja valitud kategooria tagasi andma Kirjuta ülevaade vaate kontroller, et praegu valitud kategooriat saaks kuvada selle tabelivaates.
Selle arutelu kontekstis on allikas vaatekontroller on kontroller, millelt andmeid edastatakse, ja sihtkoht vaatamise kontroller on vastutav töötleja, mis võtab vastu andmeid.
Andmete edastamine vaatekontrollerile
Räägime andmete edastamisest juurde kõigepealt vaatekontroller. See nõuab tavaliselt kolme sammu:
- Looge sihtvaate kontrolleris atribuut, et hoida lähtevaate kontrolleri edastatavaid andmeid.
- Seadistage lähte- ja sihtvaate kontrollerite vaheline vahetus.
- Rakendage lähtevaate kontrolleris valmistuda meetod ja lisage kood, mis salvestab sihtvaate kontrolleri atribuuti edastatavad andmed.
Selles näites on mõttekas edastada rakenduse kategooria ID Kirjuta ülevaade stseen ja Rakenduse kategooria stseen.
1. samm: looge sihtkohavaate kontrolleris atribuut
Meie esimene samm on lihtne. Peame lisama an appCategoryID atribuut sihtvaate kontrollerile, et lähtevaate kontrolleril oleks koht, kuhu salvestada hetkel valitud kategooria ID.
- Minge projektinavigaatorisse ja valige AppCategoryViewController.swift faili.
- Lisage dokumendis näidatud kinnisvaradeklaratsioon Joonis 2 .
![]() |
|
|
2. samm: konfigureerige allika ja sihtkoha kontrollerite vaheline Segue
See teine samm on samuti lihtne. Peate lihtsalt määrama lähte- ja sihtvaate kontrollerite vahelise vahetuse identifikaatori.
- Valige projektinavigaatoris Main. storyboard faili.
- Klõpsake vahekaardil Kirjuta ülevaade ja Rakenduse kategooria stseene selle valimiseks.
- Minge atribuutide inspektorisse (kolmas nupp paremalt Inspektori tööriistaribal) ja määrake järg Identifikaator omistada AppCategorySegue . See annab sektsiooni identifikaatori, mida saame kasutada oma lähtevaate kontrolleri koodifailis. Olge õigekirja ning suur- ja väiketähtede osas väga ettevaatlik, sest koodifailist sellele viidates peate kasutama täpselt sama nime.
![]() |
Joonis 3. Segude määramine Identifikaator juurde AppCategorySegue . |
Arvustuse kirjutamise stseeni täiustamine
Enne kui teostame rakenduse kolmanda etapi valmistuda meetodit lähtevaate kontrolleris, peame tegema natuke majapidamistöid Kirjuta ülevaade stseeni vaate kontroller.
Alustame stseenile uue eksemplari muutuja lisamisega, et hoida viidet praegu valitud rakenduse kategooria ID-le.
- Valige projektinavigaatoris WriteReviewViewController.swift faili.
- Lisage näidatud atribuut Joonis 4 . See annab meile koha praeguse rakenduse kategooria ID salvestamiseks.
Joonis 4 – uue atribuudi lisamine. - Aastal WriteReviewViewController.swift kerige failini isReadyToShare meetod. Kuna me ei soovi, et kasutaja saaks arvustust salvestada, kui pole valitud rakenduse kategooriat, peame lisama vaatekontrollerisse koodi. isReadyToShare meetod. Võib-olla mäletate, et lõime selle meetodi eelmises postituses. The Jaga ja Postita nupud on lubatud või keelatud olenevalt sellest, kas see meetod naaseb tõsi või vale .
- Kui kasutaja pole rakenduse kategooriat valinud, on selle muutuja väärtus null. Nii et lisage tšekk nulliks appCategoryID see on näidatud Joonis 5 .
Joonis 5 - Kontrollige, kas kasutaja on rakenduse kategooria valinud.
- Nüüd anname kasutajale visuaalse vihje, et ta peab rakenduse kategooria valima. Valige projektinavigaatoris Main. storyboard faili. Aastal Kirjuta ülevaade stseeni, topeltklõpsake ikooni paremal küljel Rakenduse kategooria tabelivaate rida, et panna üksikasjade silt redigeerimisrežiimi. Seejärel sisestage tekst Vali nagu näidatud Joonis 6 ja vajutage tagasi .
![]() |
Joonis 6 – seadke detailisildi tekst väärtusele Valige . |
3. samm: rakendage preparatForSegue: meetod
Nüüd olete valmis rakendama valmistuda meetod lähtevaate kontrolleris, mis antud juhul on WriteReviewViewController .
The valmistuda meetodit kutsutakse teie lähtevaate kontrolleris automaatselt välja, kui järgnevus käivitatakse. See võimaldab teil teha kohandatud toiminguid enne, kui käivitatakse sihtkontroller. Sel juhul käivitub vahetus, kui kasutaja puudutab nuppu Rakenduse kategooria tabelivaate rida Kirjuta ülevaade stseen.
- Valige projektinavigaatoris WriteReviewViewController.swift faili.
- Lisage näidatud meetod Joonis 7 otse all viewDidLoad meetod.
![]() |
Joonis 7 – valmistuda meetodi kood |
Nagu näete, valmistuda meetodile antakse viide Jälgi see käivitati. Selle meetodi kood täidab järgmisi samme, mis on seda tüüpi meetodite jaoks väga tüüpilised:
- Koodi esimene rida kontrollib segu identifikaator atribuut, et veenduda, et meid huvitab see, mis käivitati (vaatekontrolleri jaoks võib olla mitu järgu).
- Teine koodirida saab segudest viite sihtkontrollerile sihtkohtViewController vara.
- Kolmas koodirida salvestab praeguse rakenduse kategooria ID sihtkoha vaate kontrollerile appCategoryID vara.
Pärast selle meetodi käivitamist käivitatakse automaatselt suund sihtkontrollerile.
Rakenduse kategooria vaate kontrolleri täiustamine
Nüüd, kui Kirjuta ülevaade vaatekontroller edastab praegu valitud rakenduse kategooria ID-le Rakenduse kategooria vaata kontrollerit, lisame sellele koodi Rakenduse kategooria vaate kontroller, mis paneb linnukese tabelivaates parajasti valitud kategooria kõrvale.
- Valige projektinavigaatoris AppCategoryViewController.swift faili.
- Lisage oldIndexPath atribuut näidatud Joonis 8 . See omadus võimaldab meil jälgida viimati valitud üksust (näete, miks meil seda vaja on).
Joonis 8 – looge an oldIndexPath eksemplari muutuja. - Nüüd lisage näidatud kood Joonis 9 juurde tableView:cellForRowAtIndexPath: meetod.
![]() |
Joonis 9 – Kood, mis märgib hetkel valitud rakenduse kategooria |
Pea meeles, et tableView:cellForRowAtIndexPath: meetodit kutsutakse tabelivaate iga lahtri jaoks üks kord. Äsja lisatud kood kontrollib, kas AppCategoryEntity praeguse lahtriga seotud on sama mis hetkel valitud kategooria ID. Kui on, lisatakse lahtrile linnuke ja lahtri indeksi tee salvestatakse lahtrisse oldIndexPath eksemplari muutuja hilisemaks kasutamiseks. Kui see pole sama, tarviku tüüp lahtris on seatud väärtusele 'Puudub'. Teil on seda vaja muidu avaldus, nii et varem valitud kategooria pole märgitud.
Andmete tagastamine vaatekontrollerist
Rakenduse kategooria valimise funktsioonide lõpuleviimiseks peame praegu valitud kategooria tagasi andma Rakenduse kategooria stseeni juurde Kirjuta ülevaade stseen, et see saaks kuvada äsja valitud kategooria üksikasjade sildil Rakenduse kategooria tabeli vaade ( Joonis 1 ).
Parim viis selle teabe edastamiseks on luua meetodil WriteReviewViewController mida saab nimetada AppCategoryViewController . Enne selle meetodi loomist peame aga veidi ette mõtlema. Nagu näidatud Joonis 10 , on rakenduses kaks erinevat stseeni, mis põhinevad Rakenduse kategooria stseen - Kirjuta ülevaade stseen ja Interneti-arvustused stseen.
![]() |
Joonis 10 – Kirjuta ülevaade ja Interneti-arvustused stseenid mõlemad edasi Rakenduse kategooria stseen. |
See tähendab, et peame leidma praegu valitud kategooria tagastamise skeemi, mis sobib hästi mõlema jaoks Kirjuta ülevaade ja Interneti-arvustused stseen. See on koht, kus Swift protokolli võib appi tulla!
Väljaspool tarkvara valdkonda on sõna protokolli on määratletud kui:
Kehtestatud käitumiskoodeks mis tahes rühmas, organisatsioonis või olukorras.
See määratlus pole Swifti protokollide osas kaugeltki kaugel. Protokolle kasutatakse standardse käitumiskomplekti määratlemiseks. Meie olukorras vajame Kirjuta ülevaade ja Interneti-arvustused vaadata kontrollereid, et neil oleks standardne tagasihelistamise meetod, mida saab kasutada Rakenduse kategooria kuva kontroller, et edastada hetkel valitud tagasi AppCategoryEntity . Selleks võib meil olla Rakenduse kategooria vaatekontroller deklareerib protokolli, mille saab vastu võtta Kirjuta ülevaade ja Interneti-arvustused vaatamise kontrollerid.
Joonis 11 annab ülevaate viiest peamisest sammust, mida peate tegema alati, kui peate edastama teavet ühelt vaatekontrollerilt teisele. Selles kontekstis on Kirjuta ülevaade ja Interneti-arvustused vaatekontrollereid nimetatakse esitledes vaatekontroller ja Rakenduse kategooria vaatekontrollerile viidatakse kui esitati vaatamise kontroller.
![]() |
Joonis 11 – tagasihelistamismeetodi loomine andmete vaatamise kontrollerist tagasisaatmiseks |
Siin on nende sammude üksikasjad.
- Deklareerige protokollis esitati vaatekontroller, mis määrab meetodi, mida saab rakendada esitledes vaatamise kontroller. The esitati vaatekontroller kasutab seda meetodit käitamise ajal andmete tagasi edastamiseks esitledes vaatamise kontroller.
- Kuulutada a delegaat kinnistul esitati vaatekontroller, mis sisaldab viidet esitledes vaatamise kontroller. The esitati vaatekontroller kasutab seda viidet esitledes vaatekontroller, kui see kutsub selle vaatekontrolleri protokollimeetodit.
- Lisage kood esitati vaatekontroller, mis kutsub välja protokollimeetodi, edastades andmed seadmele esitledes vaatamise kontroller.
- Võtta vastu protokoll esitledes vaata kontrollerit ja rakendage meetodit koodiga, mis talle tagasi saadetud andmetega midagi teeb.
- Aastal esitledes vaata kontrollerit valmistuda meetod, on esitledes vaatamise kontroller salvestab viite iseendale esitati vaata kontrollerit delegaat vara.
Nüüd olete valmis neid samme rakenduse värskendamiseks rakendama Rakenduse kategooria tabelivaate rida Kirjuta ülevaade stseen.
1. samm: Protokolli deklareerimine esitletud vaate kontrolleris
- Valige projektinavigaatoris AppCategoryViewController.swift faili.
- Lisage AppCategoryDelegate protokolli deklaratsioon näidatud Joonis 12 .
![]() |
Joonis 12 – AppCategoryDelegate protokolli deklaratsioon |
See protokoll deklareerib ühe meetodi, updateAppCategory: mis aktsepteerib viidet an AppCategoryEntity objektiks. See on meetod, mida Kirjuta ülevaade ja Interneti-arvustused vaatekontrollerid peavad seda rakendama Rakenduse kategooria vaatekontroller saab parajasti valitud tagasi edastada AppCategoryEntity .
2. samm: deklareerige esitletud vaatekontrolleris delegaadi atribuut
Veel allpool AppCategoryViewController.swift faili, deklareerige delegaadi atribuut, mis on näidatud Joonis 13.
![]() |
Joonis 13 – Lisage delegaadi atribuut AppCategoryViewController.swift faili. |
Seda atribuuti kasutatakse esitleva vaate kontrolleri viite hoidmiseks.
3. samm: helistage delegaadile protokollimeetodile
Nüüd peame lisama koodi Rakenduse kategooria vaatekontroller, mis kutsub delegaadi protokollimeetodit (esitlusvaate kontroller), kui kasutaja valib uue rakendusekategooria.
- Valige projektinavigaatoris AppCategoryViewController.swift faili.
- Kerige faili allossa ja kustutage kogu kommenteeritud kood.
- Lisage tableView:didSelectRowAtIndexPath: meetodil näidatud Joonis 14 enne klassi sulgevat lokkis sulgu.
![]() |
Joonis 14 – Lisage kood tableView:didSelectRowAtIndexPath meetod. |
Siin on selle meetodi koodi toimimise jaotus:
- Koodi esimene rida tühistab praeguse valitud rea valiku. Kui te seda ei tee, jääb rida pärast kasutaja puudutamist siniselt esile.
- Varem kontrollitud lahter on märkimata. Väärtus oldIndexPath muutujat kasutatakse eelnevalt valitud lahtri määramiseks.
- Hetkel valitud lahtrisse lisatakse linnuke.
- Praegu valitud lahter indexPath salvestatakse hilisemaks kasutamiseks.
- The updateAppCategory: meetod kutsutakse delegeeritud objektil (esitlusvaate kontrolleril), edastades viite AppCategoryEntity parajasti valitud lahtriga seotud objekt.
4. samm: võtke Protokoll vastu esitlusvaate kontrolleris
Nüüd, kui olete esitletava vaate kontrolleri seadistanud, on aeg rakendada protokoll esitlusvaate kontrolleris.
- Valige projektinavigaatoris WriteReviewViewController.swift faili.
- Võtta vastu AppCategoryDelegate protokolli nagu näidatud Joonis 15 . Nagu näete, võib üks klass vastu võtta palju erinevaid protokolle.
Joonis 15 – vastuvõtmine AppCategoryDelegate protokolli Nüüd peame rakendama updateAppCategory: meetodis, mis on deklareeritud AppCategoryDelegate protokolli. Kuid enne selle tegemist vajame viisi, kuidas saada viide Rakenduse kategooria tabelivaate lahter Kirjuta ülevaade stseen. Parim viis selleks on luua rakule väljund.
- Selleks valige esmalt Main. storyboard faili Project Navigatoris ja seejärel kuvage Assistant Editor, klõpsates keskmist nuppu Toimetaja nupurühma Xcode akna ülaosas tööriistaribal.
- Klõpsake ülaosas olekuribal Kirjuta ülevaade stseeni, et valida vaatekontroller. See peaks automaatselt kuvama WriteReviewViewController.swift faili abiredaktoris. Kui ei, klõpsake nuppu Käsiraamat nuppu assistendi redigeerija ülaosas hüpperibal ja valige Automaatne > WriteReviewViewController.swift hüpikmenüüst.
- Hoidke kinni Kontroll klahvi alla, klõpsake nuppu Rakenduse kategooria lahtris ja lohistage hiirekursor Assistant Editori atribuutide loendi lõppu. Kui Sisestage Outlet või Outlet Collection ilmub hüpikaken ( Joonis 16 ) lase lahti Kontroll klahvi ja hiirenuppu.
Joonis 16 – Looge tabelivaate lahtri jaoks väljund.
- Hüpikaknas Loo ühendus määrake nimi väärtuseks appCategoryCell ja seejärel klõpsake nuppu Ühendage nuppu. See lisab päisefailile uue väljalaskeava.
Joonis 17. Nimetage väljalaskeava appCategoryCell . - Saate assistendi redigeerija nüüd sulgeda, klõpsates aknas vasakul asuval nupul Toimetaja nupurühma Xcode akna ülaosas.
- Nüüd olete valmis protokollimeetodit esitlusvaate kontrolleris rakendama. Selleks valige esmalt WriteReviewViewController.swift faili projektinavigaatoris. Seejärel lisage uus värskenda AppCategory meetodil näidatud Joonis 18 vahetult allpool valmistuda meetod.
![]() |
Joonis 18 – lisage värskenda AppCategory protokolli meetod WriteReviewViewController.swift faili. |
Siin on selle koodi jaotus:
- See meetod aktsepteerib an AppCategoryEntity objekt, mis edastatakse esitatud vaatekontrollerist.
- See võtab olemi väärtuse kategooria ID vara ja hoiab seda appCategoryID eksemplari muutuja.
- Samuti saab see kategooria nime nimi olemi atribuut ja värskendab üksikasjade teksti silti Rakenduse kategooria tabelivaate lahter.
- Viimane koodirida käsib tabelivaates oma andmed uuesti laadida, mis värskendab tabelivaate lahtri kuva uue kategooria kajastamiseks.
5. samm: salvestage delegaadi atribuudis viide esitleva vaate kontrollerile
Nüüd olete viimaseks sammuks valmis. Peame salvestama viite esitledes vaate kontroller ( Kirjuta ülevaade vaatamise kontroller) rakenduses esitati vaata kontrollerit delegaat vara. Suurepärane koht selleks on valmistuda meetod.
- Aastal valmistuda meetod WriteReviewViewController.swift faili, lisage näidatud kood Joonis 20 .
Joonis 20. Salvestage esitletava vaate kontrolleri viide esitletava vaate kontrolleri volitatud atribuudis.
- Kui me siin oleme, peaksime ka muutma postitusülevaade: valitud rakenduse kategooria salvestamise meetod. Kerige üles kuni postitusülevaade: meetodit ja muutke koodi teist rida, nagu näidatud Joonis 20 .
![]() |
Joonis 20. Salvestage valitud rakenduse kategooria ID Arvustuse üksus objektiks. |
Uue koodi testimine
Nüüd olete valmis proovisõiduks koodi võtma!
- Klõpsake Xcode's Jookse nuppu. Kui rakendus kuvatakse simulaatoris, valige Kirjuta arvustus valik. Sa peaksid nägema Rakenduse kategooria rea detailtekst on seatud väärtusele Valige ( Joonis 21 ).
Joonis 21 – Rakenduse kategooria rea detailtekst on seatud väärtusele Valige . - Klõpsake nuppu Rakenduse kategooria rida, et navigeerida Rakenduse kategooria stseen. Ei tohiks olla kategooriaid, mille kõrval on linnuke. Klõpsake ühte kategooriatest ja peaksite nägema selle kõrval linnukest. Kui klõpsate mõnel teisel real, peaks linnuke eelmiselt realt kaduma ja ilmuma äsja valitud reale, nagu näidatud Joonis 22 . Selle põhjustab vaatekontrolleris töötav kood tableView:didSelectRowAtIndexPath: meetod.
Joonis 22 – valitud reale peaks ilmuma linnuke.
- Nüüd klõpsake tagasi nuppu (sildiga Kirjuta ülevaade ) vaate vasakus ülanurgas, et navigeerida tagasi Kirjuta ülevaade stseen. Peaksite nägema kategooriat, mille viimati valisite Rakenduse kategooria üksikasjade silt nagu näidatud Joonis 23 !
![]() |
Joonis 23 – äsja valitud kategooria kuvatakse Rakenduse kategooria rida |
Järeldus
Me hõlmasime siin palju territooriumi, kuid tahtsin esitada kogu selle teabe ühes postituses, et saaksite näha kogu teabe edastamise protsessi vaatekontrolleritele ja nendest. Selle käigus õppisite Swifti protokollide praktilist rakendust ja ka seda, kuidas kuvada tabelivaate real linnuke. Soovitan need sammud paar korda läbi teha, et veenduda, et mõistate siin kirjeldatud olulisi iOS-i kontseptsioone.