Skip to content
Menu
CDhistory
CDhistory

Storyboards, XIB’s, and Code

Posted on september 6, 2021 by admin
Resources
Download Your Free Copy of
The Missing Manual
for Swift Development

The Guide I Wish I Had When I Start Out

Medoen met 20,000+ ontwikkelaars die leren over Swift-ontwikkeling

Download Your Free Copy

Het project Photos maakt uitsluitend gebruik van storyboards voor het ontwerpen en maken van view controllers. In deze aflevering laat ik je zien dat het coördinator patroon niet beperkt is tot storyboards. Je kunt het coördinator patroon ook gebruiken als je liever XIB bestanden gebruikt dan storyboards. Als je liever geen van beide gebruikt, dan kan dat ook. Het maakt niet uit hoe je de view controllers van je project ontwerpt en maakt.

  • Starter Project
  • Storyboards
  • XIBs
  • Code
  • What’s Next?

Starter Project

Het starter project van deze aflevering is functioneel identiek aan het voltooide project van de vorige aflevering. Er zijn echter een paar verschillen waar ik op wil wijzen. De TermsViewController klasse voldoet niet langer aan het Storyboardable protocol en het heeft nu drie subklassen, TermsViewControllerStoryboard, TermsViewControllerXIB, en TermsViewControllerCode.

De TermsViewControllerStoryboard klasse is identiek aan de TermsViewController klasse van de vorige aflevering. De gebruikersinterface van de TermsViewControllerStoryboard klasse is gedefinieerd in Main.storyboard. We kunnen een instantie van de klasse instantiëren door de instantiate() methode van het Storyboardable protocol aan te roepen.

De gebruikersinterface van de TermsViewControllerXIB klasse is gedefinieerd in TermsViewControllerXIB.xib. De klasse TermsViewControllerXIB definieert een statische, variabele eigenschap, nibName, om het gebruik van string literals te vermijden. Dit is vergelijkbaar met de storyboardIdentifier property gedefinieerd in Storyboardable.swift.

Zoals de naam al aangeeft, heeft de TermsViewControllerCode klasse geen koppeling naar een storyboard of een XIB bestand. De gebruikersinterface wordt in code gemaakt. Dit resulteert uiteraard in heel wat meer code. Laten we eens kijken naar elk van deze view controllers en onderzoeken hoe ze passen in het coördinator patroon.

Storyboards

Storyboards zijn er al een aantal jaren en Apple moedigt ontwikkelaars aan om ze te gebruiken. Ik gebruik storyboards in de meeste projecten waar ik aan werk. Xcode maakt automatisch een storyboard als je een nieuw project maakt, maar ik raad je sterk aan om meerdere kleinere storyboards te gebruiken in plaats van één groot storyboard. Door meerdere kleinere storyboards te gebruiken, kun je samenvoegconflicten gemakkelijker vermijden en het werken met kleinere storyboards is sneller en minder complex.

Segues zijn een belangrijk kenmerk van storyboards, maar ik gebruik ze nooit in combinatie met het coördinatorpatroon. Hoewel het mogelijk is om segues te gebruiken in combinatie met het coördinator patroon, betrekt een segue de view controller in de applicatie flow en dat is iets wat we willen vermijden. Onthoud dat de coördinatoren van het project de applicatiestroom afhandelen. Een view controller hoeft niets te weten over de applicatie flow en het hoeft niets te weten over andere view controllers.

Zelfs zonder segues, storyboards hebben hun waarde. Ik deel middelgrote tot grote projecten altijd op in modules. Elke module heeft een storyboard, dat de view controllers van de module bevat.

Open TermsCoordinator.swift en navigeer naar de showTerms() methode. De implementatie is identiek aan die van het voltooide project van de vorige aflevering. Het enige verschil is de naam van de view controller klasse. De termen coördinator instantieert de TermsViewControllerStoryboard klasse in plaats van de TermsViewController klasse.

// 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 bestanden zijn er al sinds de begindagen van Cocoa ontwikkeling. Ze missen een paar functies in vergelijking met storyboards, maar ze hebben nog steeds hun waarde. Ik gebruik XIBs voornamelijk voor herbruikbare componenten, zoals tabel view cellen en collectie view cellen.

Open TermsViewControllerXIB.xib. De gebruikersinterface van de TermsViewControllerXIB klasse is identiek aan die van de TermsViewControllerStoryboard klasse in Main.storyboard. Open TermsCoordinator.swift en herbekijk de showTerms()-methode. Om een instantie van de klasse TermsViewControllerXIB te maken, roepen we de init(nibName:bundle:) initializer op, waarbij we de naam van het XIB-bestand en een verwijzing naar de bundel met het XIB-bestand doorgeven.

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

Het is ook mogelijk om de gebruikersinterface van de view controllers van het project in code te maken. Als je niet van storyboards of XIB bestanden houdt, dan is dit je enige optie. Ik heb deze optie niet veel meer gebruikt sinds de introductie van storyboards, maar het kan van tijd tot tijd handig zijn.

Het maken en initialiseren van een view controller in code is handig als die view controller een complexe of dynamische gebruikersinterface heeft. Het creëren en initialiseren van view controllers in code heeft een ander overtuigend voordeel. Het maakt initializer injection mogelijk, een vorm van dependency injection. Ik bespreek dependency injection in de volgende aflevering.

Om een instantie van de TermsViewControllerCode class te maken, roepen we de init() initializer aan. Dit komt overeen met het aanroepen van de init(nibName:bundle:) initializer en het invoeren van nil voor beide argumenten.

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

What’s Next?

Het coördinator patroon is een flexibel patroon. Het maakt niet uit of je storyboards gebruikt, XIB files, of geen van beide. Je kunt segues gebruiken, maar vergeet niet dat je een fundamenteel principe van het coördinator patroon schendt als je dat doet. Een view controller hoeft niets te weten over de applicatie flow en mag niets weten over andere view controllers.

Geef een antwoord Antwoord annuleren

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Recente berichten

  • Acela is terug: NYC of Boston voor $99
  • OMIM Entry – # 608363 – CHROMOSOME 22q11.2 DUPLICATION SYNDROME
  • Kate Albrecht’s Parents – Learn More About Her Father Chris Albrecht And Mother Annie Albrecht
  • Temple Fork Outfitters
  • Burr (roman)

Archieven

  • februari 2022
  • januari 2022
  • december 2021
  • november 2021
  • oktober 2021
  • september 2021
  • augustus 2021
  • juli 2021
  • juni 2021
  • mei 2021
  • april 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