Skip to content
Menu
CDhistory
CDhistory

Storyboardok, XIB-ek és kód

Posted on szeptember 6, 2021 by admin
Források

Töltse le ingyen a
The Missing Manual
for Swift Development

The Guide I Wish I Have When I Started Out

Join 20,000+ Developers Learning About Swift Development

Download Your Free Copy

A Photos projekt kizárólag storyboardokat használ a nézetvezérlők tervezéséhez és létrehozásához. Ebben az epizódban megmutatom, hogy a koordinátor minta nem korlátozódik a storyboardokra. Akkor is használhatja a koordinátor mintát, ha a storyboardok helyett az XIB fájlokat részesíti előnyben. Ha inkább egyiket sem szeretné használni, akkor az is lehetséges. Nem számít, hogyan tervezi meg és hozza létre a projektje nézetvezérlőit.

  • Starter Project
  • Storyboardok
  • XIBs
  • Code
  • Mi következik?

Starter Project

A jelen epizód induló projektje funkcionálisan megegyezik az előző epizód kész projektjével. Van azonban néhány különbség, amire szeretnék rámutatni. Az TermsViewController osztály már nem felel meg a Storyboardable protokollnak, és most már három alosztálya van: TermsViewControllerStoryboard, TermsViewControllerXIB és TermsViewControllerCode.

A TermsViewControllerStoryboard osztály azonos az előző epizód TermsViewController osztályával. A TermsViewControllerStoryboard osztály felhasználói felülete a Main.storyboardban van definiálva. Az osztály példányát a Storyboardable protokoll instantiate() metódusának meghívásával tudjuk példányosítani.

A TermsViewControllerXIB osztály felhasználói felületét a TermsViewControllerXIB.xib-ben definiáljuk. A TermsViewControllerXIB osztály definiál egy statikus, változó tulajdonságot, a nibName-t, a string literálok használatának elkerülése érdekében. Ez hasonló a Storyboardable.swiftben definiált storyboardIdentifier tulajdonsághoz.

Amint a neve is mutatja, a TermsViewControllerCode osztálynak nincs kapcsolata egy storyboardhoz vagy egy XIB fájlhoz. A felhasználói felület a kódban jön létre. Ez nyilvánvalóan jóval több kódot eredményez. Nézzük meg az egyes nézetvezérlőket, és vizsgáljuk meg, hogyan illeszkednek a koordinátormintába.

Storyboardok

A storyboardok már évek óta léteznek, és az Apple ösztönzi a fejlesztőket a használatukra. Én a legtöbb projektben, amin dolgozom, storyboardokat használok. Az Xcode automatikusan létrehoz egy storyboardot, amikor egy teljesen új projektet hoz létre, de erősen ajánlom, hogy egyetlen nagy storyboard helyett több kisebb storyboardot használjon. Több kisebb storyboard használatával könnyebben elkerülhetők az egyesítési konfliktusok, és a kisebb storyboardokkal való munka gyorsabb és kevésbé bonyolult.

A szekvenciák a storyboardok egyik legfontosabb jellemzője, de én soha nem használom őket a koordinátor mintával együtt. Bár lehetséges a szegue-ok használata a koordinátor mintával kombinálva, egy szegue bevonja a nézetvezérlőt az alkalmazás áramlásába, és ezt szeretnénk elkerülni. Ne feledjük, hogy a projekt koordinátorai kezelik az alkalmazásfolyamot. A nézetvezérlőnek nem kell tudnia semmit az alkalmazásfolyamról, és nem kell tudnia más nézetvezérlőkről.

A storyboardoknak még szegue-k nélkül is megvan a maguk értéke. A közepes és nagy projekteket mindig modulokra bontom. Minden modulnak van egy storyboardja, amely tartalmazza a modul nézetvezérlőit.

Nyissuk meg a TermsCoordinator.swift fájlt, és navigáljunk a showTerms() metódushoz. Az implementáció megegyezik az előző epizód kész projektjével. Az egyetlen különbség a nézetvezérlő osztály neve. A Terms Coordinator a TermsViewController osztály helyett a TermsViewControllerStoryboard osztályt példányosítja.

// 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

XIB fájlok már a Cocoa fejlesztés kezdete óta léteznek. Néhány funkció hiányzik belőlük a storyboardokhoz képest, de még mindig megvan az értékük. A XIB-eket elsősorban újrafelhasználható komponensekhez használom, például a táblázatnézeti cellákhoz és a gyűjteménynézeti cellákhoz.

Open TermsViewControllerXIB.xib. A TermsViewControllerXIB osztály felhasználói felülete megegyezik a Main.storyboard TermsViewControllerStoryboard osztályéval. Nyissa meg a TermsCoordinator.swift fájlt, és nézze meg újra a showTerms() metódust. A TermsViewControllerXIB osztály példányának létrehozásához hívjuk meg a init(nibName:bundle:) inicializálót, átadva az XIB fájl nevét és egy hivatkozást az XIB fájlt tartalmazó csomagra.

// 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)}

Code

A projekt nézetvezérlőinek felhasználói felületét is létrehozhatjuk kódban. Ha nem szereted a storyboardokat vagy az XIB fájlokat, akkor ez az egyetlen lehetőséged. A storyboardok bevezetése óta nem nagyon használom ezt a lehetőséget, de időről időre hasznos lehet.

A nézetvezérlő kódban történő létrehozása és inicializálása akkor hasznos, ha a nézetvezérlőnek összetett vagy dinamikus felhasználói felülete van. A nézetvezérlők kódban történő létrehozása és inicializálása egy másik meggyőző előnnyel is jár. Lehetővé teszi az inicializáló injektálást, a függőségi injektálás egy formáját. A függőségi injektálást a következő epizódban tárgyalom.

A TermsViewControllerCode osztály egy példányának létrehozásához meghívjuk a init() inicializálót. Ez egyenértékű a init(nibName:bundle:) inicializáló meghívásával és a nil átadásával mindkét argumentumként.

// 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)}

Mi következik?

A koordinátor minta egy rugalmas minta. Nem számít, hogy storyboardokat, XIB fájlokat vagy egyiket sem használjuk. Használhatsz szegue-okat, de ne feledd, hogy ezzel megsérted a koordinátor-minta egyik alapelvét. Egy nézetvezérlőnek nem kell tudnia az alkalmazás áramlásáról, és nem szabad tudnia más nézetvezérlőkről.

Vélemény, hozzászólás? Kilépés a válaszból

Az e-mail-címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

Legutóbbi bejegyzések

  • Az Acela visszatért: New York vagy Boston 99 dollárért
  • OMIM bejegyzés – # 608363 – CHROMOSOME 22q11.2 DUPLICATION SYNDROME
  • Kate Albrecht szülei – Tudj meg többet apjáról Chris Albrechtről és anyjáról Annie Albrechtről
  • Temple Fork Outfitters
  • Burr (regény)

Archívum

  • 2022 február
  • 2022 január
  • 2021 december
  • 2021 november
  • 2021 október
  • 2021 szeptember
  • 2021 augusztus
  • 2021 július
  • 2021 június
  • 2021 május
  • 2021 április
  • 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