Zusammenfassung
Nibs / .xib-Dateien und Storyboards sind Interface Builder-Dateien, die zum visuellen Erstellen einer Benutzeroberfläche für iOS- und Mac-Anwendungen in Xcode verwendet werden (ich verwende die iOS-Terminologie für Klassen, da diese Frage mit iOS gekennzeichnet ist, aber auch für die Mac-Programmierung gilt). .
Unterschiede
Federn sind für die Verwendung mit einer einzigen vorgesehen UIView
. Sie können auch mit einer UIViewController
Unterklasse verbunden werden, indem Sie die Klasse des Dateibesitzers auf eine beliebige Unterklasse von festlegen UIViewController
und den Ansichtsausgang verbinden (ziehen Sie, um eine Verbindung mit dem Verbindungsinspektor im rechten Bereich von Xcode herzustellen).
Storyboards sollen die Benutzeroberfläche für 1 oder mehr enthalten UIViewController
. Sie können Ihre gesamte Benutzeroberfläche in einem einzigen Storyboard erstellen oder in kleinere Teile aufteilen.
Vorteile
Storyboards sollten immer zugunsten von .xib-Dateien / Nibs (für View-Controller) verwendet werden. Storyboards bieten mehr Funktionen und werden von Apple aktiv entwickelt.
Jedes Argument für Nibs beruht auf der Tatsache, dass sie einzeln verwendet wurden, während Storyboards viele Szenen enthalten. Sie können für jedes UIViewController
genauso einfach ein Storyboard verwenden wie für Nibs (siehe Codebeispiele unten). Lesen Sie weiter, um eine detaillierte Erklärung und Codebeispiele zu erhalten.
Detailliert
Warum sind Storboards Nibs überlegen?
Die Antwort liegt im Wesentlichen darin, dass Apple die Verwendung von Storyboards fördert und mehr Entwicklungsaufwand in sie steckt.
- Storyboards verfügen über Zoomfunktionen, die Nibs fehlen. Im Ernst, Sie können Nibs überhaupt nicht vergrößern, was beim Entwerfen für größere Bildschirme auf einem kleinen Laptop zum Kotzen ist.
- Bei Federn fehlen wichtige Funktionen wie:
- Prototyp und dynamische Zellen für
UITableView
( weitere Informationen )
- Die oberste Layout-Guide- Eigenschaft (siehe Kommentar)
- Es gibt wahrscheinlich mehr, bitte bearbeiten oder kommentieren Sie, wenn Sie dieser Liste etwas hinzufügen möchten
- Sie müssen sich nicht mit dem Festlegen der Klasse des Dateibesitzers herumschlagen.
Das grundlegende Argument gegen Storyboards ist, dass das Zusammenführen aller View-Controller an einem Ort zu Zusammenführungskonflikten, einem langsamen Xcode, langsamen Erstellungszeiten und einem allgemeinen Problem führt. Daher wird allgemein empfohlen, für jede Feder eine Feder zu verwenden UIViewController
.
Aber ... Sie können einfach ein Storyboard für jedes erstellen UIViewController
. Eine gängige Praxis (zumindest für mich) besteht darin, die gesamte UIViewController-Initialisierung in einer Klassenmethode auszublenden (da keine andere Klasse den Namen der Datei kennen muss, in der sich das Nib / Storyboard des Controllers befindet). Vergleichen wir die zugehörigen Codefragmente, mit denen eine solche Methode erstellt werden kann. Eine einzelne Codezeile ist der gesamte Unterschied zwischen den beiden.
Ziel c
Storyboard
+ (ViewController *)create
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"ViewController" bundle:nil];
return [storyboard instantiateInitialViewController];
}
Feder
+ (ViewController *)create
{
return [super initWithNibName:@"ViewController" bundle:nil];
}
Verwendung
- (void)showMyViewController
{
ViewController *vc = [ViewController create];
[self presentViewController:vc animated:YES completion:nil];
}
Schnell
Storyboard
static func create() -> ViewController {
let storyboard = UIStoryboard(name: "ViewController", bundle: NSBundle.mainBundle())
return storyboard.instantiateInitialViewController() as! ViewController
}
Feder
static func create() -> ViewController {
return ViewController(nibName: "ViewController", bundle: nil)
}
Verwendung
func showMyViewController() {
let vc = ViewController.create()
self.presentViewController(vc, animated: true, completion: nil)
}
Argumente
Ich werde alle üblichen Argumente für Nibs ansprechen; Wie ich bereits erwähnt habe, gibt es meistens einzelne Dateien, nicht als Argument für Nibs über Storyboards
- Teams und Zusammenschluss
Argument: Ein Storyboard mit vielen View-Controllern führt zu Zusammenführungskonflikten, wenn Sie in einem Team mit mehreren Personen arbeiten, die Änderungen vornehmen
Antwort: Ein einzelnes Storyboard verursacht nicht mehr Zusammenführungskonflikte als eine einzelne Feder
- Komplexität
Argument: Sehr komplexe Apps enthalten viele Szenen im Storyboard, was zu einem riesigen Storyboard führt, dessen Laden ewig dauert und das aufgrund seiner Größe kaum nachvollziehbar ist.
Antwort: Dies ist ein großartiger Punkt, aber Sie können Storyboards leicht in kleinere Teile zerlegen. Storyboard-Referenzen scheinen eine großartige Funktion zu sein, mit der Storyboards miteinander verknüpft werden können. Sie sind jedoch nur in Xcode 7 / iOS 9+ verfügbar. Auch immer noch kein Grund, einzelne Schreibfedern gegenüber Storyboards zu wählen.
- Wiederverwendbarkeit
Argument: Wenn Sie für jede UIViewController
Unterklasse eine Schreibfeder erstellen, können Sie Code wiederverwenden, sodass Sie nicht alle Einschränkungen und Ausgänge für jede Szene in Ihrem Storyboard einrichten müssen.
Antwort: Auch hier kein Grund, einzelne Schreibfedern gegenüber einzelnen Storyboards auszuwählen.