Skip to content
Menu
CDhistory
CDhistory

Storyboardy, XIB a kód

Posted on 6 září, 2021 by admin
Zdroje

Stáhněte si zdarma kopii knihy
Chybějící příručka
pro vývoj ve Swiftu

Příručka, kterou bych si přál mít, když jsem začínal

Přidejte se k 20,000+ Vývojáři, kteří se učí o vývoji ve Swiftu

Stáhněte si bezplatnou kopii

Projekt Fotografie používá k návrhu a tvorbě řadičů zobrazení výhradně storyboardy. V této epizodě vám ukážu, že vzor koordinátoru není omezen na storyboardy. Vzor koordinátoru můžete použít i v případě, že dáváte přednost souborům XIB před storyboardy. Pokud raději nepoužíváte ani jedno, pak je to také možné. Nezáleží na tom, jakým způsobem navrhnete a vytvoříte řadiče pohledů svého projektu.

  • Začáteční projekt
  • Storyboardy
  • XIBs
  • Kód
  • Co dál?

Začáteční projekt

Začáteční projekt z tohoto dílu je funkčně totožný s hotovým projektem z předchozího dílu. Existuje však několik rozdílů, na které chci upozornit. Třída TermsViewController již nevyhovuje protokolu Storyboardable a má nyní tři podtřídy: TermsViewControllerStoryboard, TermsViewControllerXIB a TermsViewControllerCode.

Třída TermsViewControllerStoryboard je totožná s třídou TermsViewController z předchozího dílu. Uživatelské rozhraní třídy TermsViewControllerStoryboard je definováno v souboru Main.storyboard. Instanci třídy můžeme vytvořit voláním metody instantiate() protokolu Storyboardable.

Uživatelské rozhraní třídy TermsViewControllerXIB je definováno v souboru TermsViewControllerXIB.xib. Třída TermsViewControllerXIB definuje statickou, proměnnou vlastnost nibName, aby se zabránilo používání řetězcových literálů. To je podobné vlastnosti storyboardIdentifier definované ve Storyboardable.swift.

Jak název napovídá, třída TermsViewControllerCode nemá vazbu na storyboard nebo soubor XIB. Uživatelské rozhraní je vytvořeno v kódu. To má samozřejmě za následek poměrně velké množství kódu. Podívejme se na každý z těchto řadičů zobrazení a prozkoumejme, jak zapadají do vzoru koordinátor.

Storyboardy

Storyboardy existují již několik let a společnost Apple podporuje vývojáře v jejich používání. Storyboardy používám ve většině projektů, na kterých pracuji. Xcode automaticky vytvoří storyboard při vytvoření zcela nového projektu, ale důrazně doporučuji používat několik menších storyboardů místo jednoho velkého storyboardu. Použitím několika menších storyboardů se snáze vyhnete konfliktům při slučování a práce s menšími storyboardy je rychlejší a méně složitá.

Segmenty jsou klíčovou vlastností storyboardů, ale nikdy je nepoužívám v kombinaci se vzorem koordinátor. Segues je sice možné použít v kombinaci se vzorem koordinátor, ale segue zapojuje do toku aplikace řadič zobrazení a tomu se chceme vyhnout. Nezapomeňte, že o tok aplikace se starají koordinátory projektu. Kontrolér pohledu nemusí o toku aplikace nic vědět a nemusí vědět ani o jiných kontrolérech pohledu.

I bez segmentů mají storyboardy svou hodnotu. Středně velké až velké projekty vždy rozděluji na moduly. Každý modul má storyboard, který obsahuje řadiče pohledů daného modulu.

Otevřete soubor TermsCoordinator.swift a přejděte na metodu showTerms(). Implementace je totožná s implementací hotového projektu z předchozího dílu. Jediným rozdílem je název třídy view controller. Koordinátor termínů instancuje třídu TermsViewControllerStoryboard místo třídy TermsViewController.

// MARK: - Helper Methodsprivate func showTerms() { // Initialize Terms View Controller let termsViewController = TermsViewControllerStoryboard.instantiate() // Install Handlers termsViewController.didCancel = { in self?.finish() } // Present Terms View Controller presentingViewController.present(termsViewController, animated: true)}

XIBs

Soubory XIB existují již od počátků vývoje Cocoa. Ve srovnání se storyboardy jim chybí několik funkcí, ale stále mají svou hodnotu. Soubory XIB používám především pro opakovaně použitelné komponenty, jako jsou buňky zobrazení tabulky a buňky zobrazení kolekce.

Otevřít podmínkyViewControllerXIB.xib. Uživatelské rozhraní třídy TermsViewControllerXIB je totožné s uživatelským rozhraním třídy TermsViewControllerStoryboard v Main.storyboard. Otevřete soubor TermsCoordinator.swift a znovu si prohlédněte metodu showTerms(). Pro vytvoření instance třídy TermsViewControllerXIB zavoláme inicializátor init(nibName:bundle:), kterému předáme název souboru XIB a odkaz na svazek obsahující soubor XIB.

// MARK: - Helper Methodsprivate func showTerms() { // Initialize Terms View Controller let termsViewController = TermsViewControllerXIB(nibName: TermsViewControllerXIB.nibName, bundle: .main) // Install Handlers termsViewController.didCancel = { in self?.finish() } // Present Terms View Controller presentingViewController.present(termsViewController, animated: true)}

Kód

Je také možné vytvořit uživatelské rozhraní řadičů zobrazení projektu v kódu. Pokud nemáte rádi storyboardy nebo soubory XIB, pak je to vaše jediná možnost. Od zavedení storyboardů jsem tuto možnost příliš nepoužíval, ale čas od času může být užitečná.

Vytvoření a inicializace řadiče zobrazení v kódu je užitečné, pokud má tento řadič zobrazení složité nebo dynamické uživatelské rozhraní. Vytváření a inicializace řadičů zobrazení v kódu má ještě jednu přesvědčivou výhodu. Umožňuje inicializační injekci, což je forma injekce závislostí. Injektování závislostí proberu v příštím díle.

Pro vytvoření instance třídy TermsViewControllerCode vyvoláme inicializátor init(). To je ekvivalentní volání inicializátoru init(nibName:bundle:) a předání nil pro oba argumenty.

// MARK: - Helper Methodsprivate func showTerms() { // Initialize Terms View Controller let termsViewController = TermsViewControllerCode() // Install Handlers termsViewController.didCancel = { in self?.finish() } // Present Terms View Controller presentingViewController.present(termsViewController, animated: true)}

Co dál?

Vzor koordinátor je flexibilní vzor. Nezáleží na tom, zda používáte storyboardy, soubory XIB nebo ani jedno z toho. Můžete používat segmenty, ale nezapomeňte, že pokud tak učiníte, porušíte základní princip vzoru koordinátor. Řadič zobrazení nemusí vědět o toku aplikace a neměl by vědět o jiných řadičích zobrazení.

.

Napsat komentář Zrušit odpověď na komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Nejnovější příspěvky

  • Acela je zpět:
  • OMIM záznam – # 608363 – CHROMOSOM 22q11.2 DUPLICATION SYNDROME
  • Rodiče Kate Albrechtové – více o jejím otci Chrisu Albrechtovi a matce Annie Albrechtové
  • Temple Fork Outfitters
  • Burr (román)

Archivy

  • Únor 2022
  • Leden 2022
  • Prosinec 2021
  • Listopad 2021
  • Říjen 2021
  • Září 2021
  • Srpen 2021
  • Červenec 2021
  • Červen 2021
  • Květen 2021
  • Duben 2021
  • DeutschDeutsch
  • NederlandsNederlands
  • SvenskaSvenska
  • DanskDansk
  • EspañolEspañol
  • FrançaisFrançais
  • PortuguêsPortuguês
  • ItalianoItaliano
  • RomânăRomână
  • PolskiPolski
  • ČeštinaČeština
  • MagyarMagyar
  • SuomiSuomi
  • 日本語日本語
©2022 CDhistory | Powered by WordPress & Superb Themes