Hoppa till innehåll
Meny
CDhistory
CDhistory

Storyboards, XIBs och kod

Publicerat den september 6, 2021 av admin
Resurser

Ladda ner ditt gratisexemplar av
The Missing Manual
for Swift Development

Guiden jag önskar att jag hade haft när jag började

Samarbeta med 20,000+ utvecklare som lär sig om Swift-utveckling

Ladda ner ditt gratisexemplar

Projektet Photos använder uteslutande storyboards för att designa och skapa view controllers. I det här avsnittet visar jag dig att koordinatormönstret inte är begränsat till storyboards. Du kan också använda koordinatormönstret om du föredrar XIB-filer framför storyboards. Om du föredrar att använda varken det ena eller det andra är det också möjligt. Det spelar ingen roll hur du utformar och skapar vykontrollerna i ditt projekt.

  • Startprojekt
  • Storyboards
  • XIBs
  • Kod
  • What’s Next?

Startprojekt

Startprojektet i det här avsnittet är funktionellt identiskt med det färdiga projektet i föregående avsnitt. Det finns dock några skillnader som jag vill påpeka. Klassen TermsViewController följer inte längre protokollet Storyboardable och den har nu tre underklasser, TermsViewControllerStoryboard, TermsViewControllerXIB och TermsViewControllerCode.

Klassen TermsViewControllerStoryboard är identisk med klassen TermsViewController i föregående avsnitt. Användargränssnittet för klassen TermsViewControllerStoryboard definieras i Main.storyboard. Vi kan instantiera en instans av klassen genom att åberopa instantiate()-metoden i Storyboardable-protokollet.

Användargränssnittet för TermsViewControllerXIB-klassen definieras i TermsViewControllerXIB.xib. Klassen TermsViewControllerXIB definierar en statisk, variabel egenskap, nibName, för att undvika användning av stränglitteraler. Detta liknar egenskapen storyboardIdentifier som definieras i Storyboardable.swift.

Som namnet antyder har TermsViewControllerCode-klassen ingen länk till en storyboard eller en XIB-fil. Användargränssnittet skapas i kod. Detta resulterar naturligtvis i en hel del mer kod. Låt oss ta en titt på var och en av dessa view controllers och undersöka hur de passar in i koordinatormönstret.

Storyboards

Storyboards har funnits i flera år och Apple uppmuntrar utvecklare att använda dem. Jag använder storyboards i de flesta projekt jag arbetar med. Xcode skapar automatiskt en storyboard när du skapar ett helt nytt projekt, men jag rekommenderar starkt att du använder flera mindre storyboards istället för en stor storyboard. Genom att använda flera mindre storyboards kan du lättare undvika sammanfogningskonflikter och att arbeta med mindre storyboards är snabbare och mindre komplicerat.

Seggar är en viktig funktion i storyboards, men jag använder dem aldrig i kombination med koordinatormönstret. Det är visserligen möjligt att använda segues i kombination med koordinatormönstret, men en segue involverar view controller i applikationsflödet och det är något vi vill undvika. Kom ihåg att projektets samordnare hanterar programflödet. En vykontrollant behöver inte veta något om programflödet och den behöver inte veta något om andra vykontrollanter.

Även utan segues har storyboards sitt värde. Jag delar alltid upp medelstora till stora projekt i moduler. Varje modul har en storyboard, som innehåller modulens view controllers.

Öppna TermsCoordinator.swift och navigera till metoden showTerms(). Genomförandet är identiskt med det färdiga projektet i föregående avsnitt. Den enda skillnaden är namnet på klassen för visningskontrollanten. Terms coordinator instantierar klassen TermsViewControllerStoryboard istället för 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

XIB-filer har funnits sedan Cocoautvecklingens tidiga dagar. De saknar några funktioner jämfört med storyboards, men de har fortfarande sitt värde. Jag använder i första hand XIB-filer för återanvändbara komponenter, till exempel tabellvyns celler och samlingsvyns celler.

Öppna termerViewControllerXIB.xib. Användargränssnittet för TermsViewControllerXIB-klassen är identiskt med det för TermsViewControllerStoryboard-klassen i Main.storyboard. Öppna TermsCoordinator.swift och återbesök metoden showTerms(). För att skapa en instans av TermsViewControllerXIB-klassen åberopar vi init(nibName:bundle:)-initieraren och överlämnar namnet på XIB-filen och en referens till det paket som innehåller XIB-filen.

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

Kod

Det är också möjligt att skapa användargränssnittet för projektets visningskontrollanter i kod. Om du inte gillar storyboards eller XIB-filer är detta ditt enda alternativ. Jag har inte använt det här alternativet särskilt mycket sedan införandet av storyboards, men det kan vara användbart då och då.

Skapa och initiera en vykontrollant i kod är användbart om den vykontrollanten har ett komplext eller dynamiskt användargränssnitt. Att skapa och initialisera view controllers i kod har en annan övertygande fördel. Det möjliggör initializer injection, en form av beroendeinjektion. Jag diskuterar beroendeinjektion i nästa avsnitt.

För att skapa en instans av TermsViewControllerCode-klassen åberopar vi init()-initieraren. Detta är likvärdigt med att åberopa init(nibName:bundle:) initializer och överlämna nil för båda 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?

Koordinatormönstret är ett flexibelt mönster. Det spelar ingen roll om du använder storyboards, XIB-filer eller ingetdera. Du kan använda segues, men kom ihåg att du bryter mot en grundläggande princip i koordinatormönstret om du gör det. En visningskontrollant behöver inte känna till programflödet och bör inte känna till andra visningskontrollanter.

Lämna ett svar Avbryt svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

Senaste inläggen

  • Acela är tillbaka:
  • OMIM Entry – # 608363 – KROMOSOM 22q11.2 DUPLIKATIONSSYNDROM
  • Kate Albrechts föräldrar – Lär dig mer om hennes far Chris Albrecht och hennes mor Annie Albrecht
  • Temple Fork Outfitters
  • Burr (roman)

Arkiv

  • februari 2022
  • januari 2022
  • december 2021
  • november 2021
  • oktober 2021
  • september 2021
  • augusti 2021
  • juli 2021
  • juni 2021
  • maj 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 | Drivs med WordPress och Superb Themes
Meny
CDhistory