Connecting View Controllers
käyttämällä storyboard
sarjan UIViewControllers
liittämistä yhteen on kysymys kappaleiden vetämisestä ja pudottamisesta storyboard
.
ensin lisätään alkunäkymäohjain Navigointiohjaimeen
seuraavassa animoidussa gif-kuvassa näytetään, miten kolme katseluohjainta voidaan sijoittaa peräkkäin, jolloin yksinkertainensegue
lisätään jokaisen väliin, asetetaan näyttöseggioksi eli jokainen katseluohjain liukuu sisään.
olen nimennyt segues movetosecondin ja movetothirdin ensimmäisen ja toisen näkymäohjaimen ja toisen ja kolmannen näkymäohjaimen välille (vastaavasti).
Lisää painikkeita toiminnoilla
jokaiselle näkymäohjaimelle on lisättävä painike (jotta voidaan kirjoittaa koodi, jolla segue
).
Tämä on suhteellisen helppo veto-ja pudotusoperaatio (vain ensimmäinen painike näkyy tässä)
liikkuvat tiedot: siirtää tietoja seguen kautta
on mahdollista siirtää tietoja näkymäohjaimelta toiselle käyttämälläsegue
.
siirtyminen ensimmäisen näkymän ohjaimeen antaa meille seuraavan, jossa tärkeä osa kommentoidaan (FirstViewController on ensimmäisen näkymän ohjaimeen liittyvä luokka, kuten yllä olevassa animoidussa gif: ssä näytetään), ja painikkeen toiminta ilmaistaan.
aiomme käyttää tätä tietojen siirtämiseen ja siirtämiseen näkymäohjaimelta toiselle käyttämällä performSegue(withIdentifier: String, sender: Any?)
, työkalentaen sitä nappitoiminnolla.
päivitämme toiminnon kutsuaksemme seguen movetosecondiksi (kuten yllä on mainittu). Nyt tässä tapauksessa meidän ei tarvitse tietää lähettäjää, joten tämä voi olla nolla, mutta meidän täytyy ehdottomasti olla varmoja, että segue
merkkijono on oikein tunnistettu. Me kaikki tiedämme, että merkkijonojen sovittaminen on huono idea, mutta sen välttämiseksi voit nähdä aiemmin tekemäni ihastuttavan kirjoituksen.
mutta painamalla ilman Merkkijonosovitusta, käytämme prepare(for:sender:)
, no, valmistautuaksemme segueen. Valmis menetelmä näyttää jotain seuraavista (joka lisätään meidän ensimmäinen näkymä ohjain):
nyt tämä nojaa siihen, että meillä on dataSent
ominaisuus näkymäohjaimessa, jossa käymme.
tämän voi siis sijoittaa melko houkuttelevasti nimettyyn SecondViewController
, vaikka kyseessä on vain yksinkertainen ominaisuus, joka on sijoitettu näköohjainluokkaan.
miten nämä parhaiten näytetään? Haen animoidun GIF-kuvan.
liikkuvat tiedot: Siirrä tiedot takaisin delegaatin
kautta mitä jos haluat siirtää tiedot takaisin second view-ohjaimesta, voimme haluta siirtää tiedot takaisin first view-ohjaimelle. Yksi keino tähän on delegoinnin käyttäminen.
tätä varten asetamme delegaatin
tämän jälkeen meidän on mukauduttava delegaattiin FirstViewController
, jolla vain tulostamme viestin
nyt sisällä SecondViewController
lisäämme delegaatin ominaisuudeksi, johon olen sitten päättänyt soittaa func viewWillDisappear(_ animated: Bool)
joten aina kun näkymä korvataan, viesti lähetetään
siellä on pari asiaa, joten tässä on animated gif
Unwind Segue
The unwind segue gives us something rather more.
To traverse from First View Controller
to Second View Controller
to Third View Controller
is a stepwise process. However, an unwind segue gives the ability to move from Third View Controller
to First View Controller
, skipping the Second View Controller
entirely.
step in the unwind segue!
FirstViewController
tarvitaan func unwindToFirst(_ unwindSegue: UIStoryboardSegue)
funktio, joka suoritetaan, kun kuvakäsikirjoitus siirtyy takaisin FirstViewController
.
The storyboard section of this by control — dragging from a button to the top-right hand button ”exit”
So difficult to show! Tässä on animoitu GIF
on myös mahdollista siirtää dataa seguen kautta samalla tavalla kuin edellä on kuvattu.
Luo oma, mukautettu Segue
yksi syy luoda oma segue
on luoda kiva animaatio, kun näkymä esitetään.
animaationi? A Fade Out (edustaa meidän fading from life, rakkaus).
luomamme segue on mukautettu Segue (eikä näytä segue edellä).
tämän seguen sisällä on valittava seguen luokka ja asetettava tunniste. Täällä sitä kutsutaan customSegue
.
Tämä sitten käyttää kokonaan uutta tiedostoa uudenMyCustomSegue
Luokka; olen melko luovasti kutsunut tätä tiedostoa mycustomsegueksi.swift, joka perii UIStoryboardSegue
.
seguen toiminta on, hyvin, suoritettu suoritusfunktion kanssa on ohitettu. override func perform()
ottakaamme perform()
step-by-step. Saadakseen vallan siirtymävaiheeseen asetimme MyCustomSegue
olevan transitioningDelegate
. Luokan kärjessä on säilynyt viittaus private var selfRetainer: MyCustomerSegue? = nil
, jota vaaditaan, koska UIKit
ei säilytä esiintymiä UIStoryboardSegue
, joten vahva viittaus syntyy samaan. Esitystyyliksi on asetettu .fullScreen
alkuperäisen näkymäohjaimen tilalle.
transitioningDelegate
tarjoaa esittämiseen ja irtisanomiseen toimivia menetelmiä. Otamme käyttöön kaksi luokkaa, Presenter
ja Dismisser
niiden käsittelemiseksi, että ne ottavat käyttöön UIViewControllerAnimatedTransitioning
ja NSObject
.
juontaja on melko helppo kirjoittaa.
täällä juontaja täyttää protokollan, jolla on funktiot func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval
ja func animateTransition(using transitionContext: UIViewControllerContextTransitioning)
.
näistä ensin mainittu on yksinkertaisesti aika, 1,5 on aika mukava span aika tälle fade-animaatiolle.
kirjain on animaatio, joten häivytys on esittävälle näkymäohjaimelle läpikuultavasta läpinäkymättömään (eli 0,0-1,0).
mikä tuo on? Haluatko leikkikentän, jossa on kaikki mukana? Annan sen sitten:
parempi on koko Repo työn kanssa. Se on tämän sivun alalaidassa.
johtopäätös
segmentit eivät ole niin helppoja kuin voisi luulla, mutta niiden avulla voit animoida käyttäjän matkan sovelluksen kautta ja työntää tietoja ympäriinsä.
kukapa sitä ei haluaisi?
toivon, että tämä opas on antanut sinulle tönäisyn oikeaan suuntaan tälle (vaikkakin hauskalle) tavalle siirtää käyttäjäsi ja heidän tietonsa sovelluksen ympärille.