Jak předávat data v segmentu Unwind (Swift 3)

Dva řadiče pohledu a sejf

Odepínat segue (aka "výstupní segue") je segue, který umožňuje uživateli navigovat zpět ze svého aktuálního řadiče pohledu na předchozí řadič pohledu.

Představte si: Mám dva řadiče pohledu a segues viewController1 na viewController2. Uživatel vytvoří nebo upraví data v viewController2 a já chci poslat tato data zpět do viewController1. S tím může pomoci uvolněná selata.

Pro ilustraci toho, jak jsem použil uvolnit segue k předávání dat mezi dvěma viewControllers, jsem vytvořil aplikaci, která uvádí oblíbené postavy Mad Men.

Segment: MadMenTableViewController -> AddCharacterViewController

První řadič zobrazení, MadMenTableViewController, zobrazuje tabulkuView znaků. Tlačítko „+“ v navigační liště MadMenTableViewController uživatele přepne do AddCharacterViewController, kde uživatel může do textového pole vložit jméno oblíbené postavy a na jeho navigační liště stisknout tlačítko „Uložit“.

Unwind Segue: AddCharacterViewController -> MadMenTableViewController

Když „odmotám“ seju z AddCharacterViewController, aby se jméno nového znaku (řetězec z textového pole) vrátilo zpět do MadMenTableViewController, chci mít možnost předat tento název znaku se sejítým segue, aby mohl být přidán do pole znaků Mad Men a zobrazených v tabulce.

Nastavení scénáře

Ve Storyboardu jsem z mého MadMenTableViewController přetáhl navigační tlačítko „+“ (add) do zobrazení AddCharacterViewController a jako typ segue vybral „Show“ (např. Push).

Nastavení AddCharacterViewController

V mém AddCharacterViewController mám uloženou vlastnost nazvanou znak, která bude držet jméno nového znaku zadaného uživatelem (z textového pole). Přepíšu metodu preparace (pro segue :) a rozbalím text z textového pole a přiřadí jeho hodnotu vlastnosti character. Právě v této funkci bude hodnota znaku předána zpět do ovládacího prvku MadMenTableViewController, jakmile se segue odvíjí.

Nastavení MadMenTableViewController

Ve své třídě MadMenTableViewController píšu funkci @IBAction, unfindFromAddVC (_ sender :), která se bude volat, když AddCharacterViewController uvolní segue (když kliknete na tlačítko „Save“ a když se ukončí AddCharacterViewController).

Nahoře na řádku # 21 mám svoji funkci unfindFromAddVC. Tato funkce je to, co dostane řetězec názvů znaků a přidá jej do pole existujících oblíbených položek Mad Men.

Na řádku # 23 zkontroluji, zda je zdrojem, který odvíjí segue, můj požadovaný AddCharacterViewController.

Na řádku 24, pokud je to skutečně můj AddCharacterViewController, rozbalím tohoto odesílateleVC a přistupuji k jeho vlastnosti znaku (String) (pamatujte, tento řetězec obsahoval jméno naší postavy).

Na řádku # 25 je tato vlastnost znaku připojena k našemu poli madMenCharacters.

Na řádku # 27 se ujistěte, že aktualizuji tabulkuViewView, protože nyní máme v našem poli novou položku, kterou je třeba zobrazit.

Připojování „Uložit“ k „Ukončení AddCharacterViewController“

Zpátky v Storyboard, je tu ještě jedna věc, kterou musíte udělat.

Ovládací prvek přetáhněte tlačítko „Uložit“ v AddCharacterViewController na ikonu Exit (oranžová ikona zcela vpravo). Když to pustíte, měla by se objevit metoda @IBAction v MadMenTableViewController. Vyberte ji, vytvořte a spusťte aplikaci.

Data z mého druhého zobrazovacího řadiče jsou nyní předána mému prvnímu zobrazovacímu řadiči! Bylo to docela snadné!

Jo, bylo to opravdu tak snadné.

Koukni na to:

Moje repo pro tento projekt najdete zde.

Zdroje:

Používání segmentů - Apple Documentation