Sådan videresendes data i et unwind-segment (Swift 3)

To visningscontrollere og et slap af

Et afslappet segment (også kaldet et "exit segment") er et segment, der giver brugeren mulighed for at navigere tilbage fra deres nuværende visningskontroller til en tidligere visningskontroller.

Forestil dig: Jeg har to visningskontrollere og viewController1-segmenter til viewController2. Brugeren opretter eller redigerer data i viewController2, og jeg vil sende disse data tilbage til viewController1. Et afslappet segment kan hjælpe med dette.

For at illustrere, hvordan jeg brugte et afslappet segment til at videregive data mellem to viewControllere, lavede jeg en app, der viser favorit Mad Men-tegn.

Segue: MadMenTableViewController -> AddCharacterViewController

Den første visningskontroller, MadMenTableViewController, viser en tabelvisning af tegn. En "+" -knap i MadMenTableViewController's navigationslinje adskiller en bruger til AddCharacterViewController, hvor en bruger kan indtaste et foretrukket tegns navn i en textField og trykke på en "Gem" -knap i sin navigationslinje.

Frakobl Segue: AddCharacterViewController -> MadMenTableViewController

Når jeg "slapper af" segmentet fra AddCharacterViewController for at tage det nye tegns navn (en streng fra textField) tilbage til MadMenTableViewController, vil jeg være i stand til at videregive dette karakternavn med det slappe af segmentet, så det kan føjes til arrayet af Mad Men-tegn og vises i tabellen.

Opsætning af storyboard

I Storyboard, fra min MadMenTableViewController, styrede jeg min navigation “+” (tilføj) -knap til AddCharacterViewController-visningen og valgte “Vis” (f.eks. Push) som sin segmenttype.

AddCharacterViewController-opsætning

I min AddCharacterViewController har jeg en gemt egenskab kaldet tegn, der vil indeholde navnet på det nye tegn, der er indtastet af brugeren (fra textField). Jeg tilsidesætter metoden forbered (til segue :) og pakker teksten ud af tekstfeltet og tildeler dens værdi til karakteregenskab. Det er i denne funktion, at tegnværdien føres tilbage til MadMenTableViewController, når segmentet afvikles.

MadMenTableViewController-opsætning

I min MadMenTableViewController-klasse skriver jeg en @IBAction-funktion, afvindFromAddVC (_ afsender :), der vil blive kaldt, når AddCharacterViewController spoler segmentet (når "Gem" -knappen klikkes og AddCharacterViewController afsluttes.

Ovenfor på linje 21 har jeg min afkørselFromAddVC-funktion. Denne funktion er, hvad der vil modtage karakternavnsstrengen og tilføje den til matrixen af ​​eksisterende Mad Men-favoritter.

På linje 23 tjekker jeg for at se, om kilden, der fjerner segmentet, er min ønskede AddCharacterViewController.

På linje 24, hvis det virkelig er min AddCharacterViewController, pakker jeg denne afsenderVC ud og får adgang til dens egenskab (streng) (husk, denne streng holdt vores karakternavn).

På linje 25 føjes denne karakteregenskab til vores madMenCharacters-array.

På linje 27 sørger jeg for at opdatere tableView, da vi nu har en ny vare i vores matrix, der skal vises.

Tilslutning af "Gem" til "Afslut AddCharacterViewController"

Tilbage i Storyboard er der en sidste ting at gøre.

Kontroller, træk knappen "Gem" i AddCharacterViewController til dens exit-ikon (orange ikon helt til højre). Når du giver slip, skal @IBAction-metoden i MadMenTableViewController vises. Vælg det, opbyg og kør din app.

Dataene fra min anden visningskontroller overføres nu til min første visningskontroller! Det var ret let!

Ja, det var virkelig så let.

Tjek det ud:

Min repo til dette projekt kan findes her.

Ressourcer:

Brug af segmenter - Apple-dokumentation