Skip to content
Menu
CDhistory
CDhistory

Storyboard-uri, XIB-uri și cod

Posted on septembrie 6, 2021 by admin
Resurse

Descărcați copia dvs. gratuită a
Manualului lipsă
pentru dezvoltarea Swift

Ghidul pe care mi-aș fi dorit să-l am când am început

Alăturați-vă la 20,000+ de dezvoltatori care învață despre dezvoltarea Swift

Descărcați exemplarul gratuit

Proiectul Photos folosește exclusiv storyboard-uri pentru a proiecta și crea controlori de vizualizare. În acest episod, vă arăt că modelul coordonator nu se limitează la storyboard-uri. Puteți utiliza modelul coordonator și dacă preferați fișierele XIB în locul storyboard-urilor. Dacă preferați să nu folosiți niciunul dintre ele, atunci și acest lucru este posibil. Nu contează modul în care proiectați și creați controlorii de vizualizare ai proiectului dumneavoastră.

  • Proiect de pornire
  • Storyboards
  • XIBs
  • Code
  • Ce urmează?

Proiect de pornire

Proiectul de pornire din acest episod este identic din punct de vedere funcțional cu proiectul finalizat din episodul anterior. Totuși, există câteva diferențe pe care vreau să le subliniez. Clasa TermsViewController nu mai este conformă cu protocolul Storyboardable și are acum trei subclase, TermsViewControllerStoryboard, TermsViewControllerXIB și TermsViewControllerCode.

Clasa TermsViewControllerStoryboard este identică cu clasa TermsViewController din episodul anterior. Interfața utilizator a clasei TermsViewControllerStoryboard este definită în Main.storyboard. Putem instanția o instanță a clasei prin invocarea metodei instantiate() a protocolului Storyboardable.

Interfața utilizator a clasei TermsViewControllerXIB este definită în TermsViewControllerXIB.xib. Clasa TermsViewControllerXIB definește o proprietate statică, variabilă, nibName, pentru a evita utilizarea șirurilor literale. Aceasta este similară proprietății storyboardIdentifier definită în Storyboardable.swift.

După cum sugerează și numele, clasa TermsViewControllerCode nu are o legătură cu un storyboard sau cu un fișier XIB. Interfața cu utilizatorul este creată în cod. În mod evident, acest lucru are ca rezultat un cod destul de mare. Să aruncăm o privire asupra fiecăruia dintre acești controlori de vizualizare și să explorăm modul în care se încadrează în modelul coordonator.

Storyboards

Storyboards există de câțiva ani, iar Apple încurajează dezvoltatorii să le folosească. Eu folosesc storyboards în majoritatea proiectelor la care lucrez. Xcode creează automat un storyboard atunci când creați un proiect nou, dar vă recomand cu tărie să folosiți mai multe storyboard-uri mai mici în loc de un singur storyboard mare. Utilizând mai multe storyboard-uri mai mici, puteți evita mai ușor conflictele de fuziune, iar lucrul cu storyboard-uri mai mici este mai rapid și mai puțin complex.

Seguințele sunt o caracteristică cheie a storyboard-urilor, dar nu le folosesc niciodată în combinație cu modelul coordonator. Deși este posibil să se utilizeze segues în combinație cu modelul coordonator, un segue implică controlorul de vizualizare în fluxul aplicației și acesta este un lucru pe care dorim să-l evităm. Amintiți-vă că coordonatorii proiectului se ocupă de fluxul aplicației. Un controler de vizualizare nu trebuie să știe nimic despre fluxul aplicației și nu trebuie să știe despre alți controlori de vizualizare.

Chiar și fără secvențe, storyboard-urile au valoarea lor. Eu întotdeauna împart proiectele medii și mari în module. Fiecare modul are un storyboard, care conține controlorii de vizualizare ai modulului.

Deschideți TermsCoordinator.swift și navigați până la metoda showTerms(). Implementarea este identică cu cea a proiectului finalizat din episodul anterior. Singura diferență este numele clasei controlorilor de vizualizare. Coordonatorul de termeni instanțiază clasa TermsViewControllerStoryboard în loc de clasa 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

Filele XIB au existat încă din primele zile ale dezvoltării Cocoa. Le lipsesc câteva caracteristici în comparație cu storyboard-urile, dar încă au valoarea lor. Eu folosesc în principal XIB-urile pentru componente reutilizabile, cum ar fi celulele de vizualizare a tabelelor și celulele de vizualizare a colecțiilor.

Deschideți termeniiViewControllerXIB.xib. Interfața utilizator a clasei TermsViewControllerXIB este identică cu cea a clasei TermsViewControllerStoryboard din Main.storyboard. Deschideți TermsCoordinator.swift și revizitați metoda showTerms(). Pentru a crea o instanță a clasei TermsViewControllerXIB, invocăm inițializatorul init(nibName:bundle:), trecând numele fișierului XIB și o referință la pachetul care conține fișierul 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)}

Code

De asemenea, este posibil să se creeze în cod interfața utilizator a controlorilor de vizualizare din proiect. Dacă nu vă plac storyboard-urile sau fișierele XIB, atunci aceasta este singura dvs. opțiune. Nu am folosit foarte mult această opțiune de la introducerea storyboard-urilor, dar poate fi utilă din când în când.

Crearea și inițializarea unui controler de vizualizare în cod este utilă dacă acel controler de vizualizare are o interfață utilizator complexă sau dinamică. Crearea și inițializarea controlorilor de vizualizare în cod are un alt beneficiu convingător. Acesta permite injectarea inițializatorului, o formă de injectare a dependenței. Voi discuta despre injecția de dependență în episodul următor.

Pentru a crea o instanță a clasei TermsViewControllerCode, invocăm inițializatorul init(). Acest lucru este echivalent cu invocarea inițializatorului init(nibName:bundle:) și trecerea în nil pentru ambele argumente.

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

Ce urmează?

Patronul coordonator este un model flexibil. Nu contează dacă folosiți storyboard-uri, fișiere XIB sau niciuna dintre ele. Puteți folosi secvențe, dar nu uitați că, dacă o faceți, încălcați un principiu fundamental al modelului coordonator. Un controler de vizualizare nu trebuie să știe despre fluxul aplicației și nu ar trebui să știe despre alți controlori de vizualizare.

Lasă un răspuns Anulează răspunsul

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Articole recente

  • Acela s-a întors: NYC sau Boston pentru 99 de dolari
  • Părinții lui Kate Albrecht – Aflați mai multe despre tatăl ei, Chris Albrecht, și despre mama ei, Annie Albrecht
  • Temple Fork Outfitters
  • Burr (roman)
  • Trek Madone SLR 9 Disc

Arhive

  • februarie 2022
  • ianuarie 2022
  • decembrie 2021
  • noiembrie 2021
  • octombrie 2021
  • septembrie 2021
  • august 2021
  • iulie 2021
  • iunie 2021
  • mai 2021
  • aprilie 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