Was sind die Hauptunterschiede zwischen der Verwendung von Storyboards und XIB-Dateien?
Welche Vor- oder Nachteile hat die Verwendung eines Storyboards?
Leider konnte ich trotz einiger Recherchen auf Storyboards nur einfache Tutorials finden, die Ihnen zeigen, wie Sie ein Storyboard einrichten, anstatt konkrete Informationen zu geben, die erklären, was sie sind.
ios
xcode
storyboard
interface-builder
xib
Steve
quelle
quelle
Antworten:
Ein Storyboard ist:
Ich benutze Storyboards jetzt schon eine Weile und der EINZIGE Nachteil ist, dass Sie nicht auf iOS 4 oder niedriger abzielen können. Storyboards funktionieren nur auf Geräten mit iOS 5 oder besser. Davon abgesehen gibt es viele Vorteile und die Nachteile sind IMO nicht vorhanden.
Das beste Tutorial, das ich gesehen habe, ist das von Ray Wenderlich
Wenn Sie Mitglied des Apple Developer-Programms sind, lesen Sie die WWDC-Sitzung des letzten Jahres auf Storyboards (iTunesU). Es ist großartig.
Ein weiterer großartiger Kurs (auch auf iTunesU) ist der neueste Stanford iOS Application Programming-Kurs.
quelle
Storyboarding hat nicht nur Vorteile, sondern auch Nachteile - nur weil Sie um Eingabe gebeten haben:
-Das Folgende ist nicht wahr: - Wenn Sie Dinge tun müssen, die SB nicht anbietet, ist es nicht ganz einfach, SB mit programmatisch erstellten Ansichten zu mischen (nun, es ist jedoch möglich).
Die Faustregel scheint zu lauten: Je komplexer Ihr Projekt wird, desto besser sollten Sie sich nicht für SB entscheiden.
EDIT: - Ein weiterer Nachteil von SB: Umgehen aller lästigen Fehler von XCode in Bezug auf SB. ZB muss der DerivedData-Ordner wegen mehrerer Inkonsistenzen häufig geleert werden. Manchmal werden Storyboard-Dateien oder der Link zu ihnen beschädigt. Dann haben Sie vielleicht die Freude, nach dem Problem zu suchen. Schauen Sie sich diesen Thread an, um die Idee zu bekommen
EDIT 2 (März 2013): Inzwischen funktionieren Storyboards und Xcode viel besser, und Dokumentation und Best Practices sind weit verbreitet. Ich denke, die Arbeit mit Storyboard kann für die meisten Projekte empfohlen werden, auch wenn es immer noch einige Störungen gibt.
EDIT 3 (Sept 2013): Jetzt mit dem neuen Xcode 5-Format könnte die Arbeit in Teams mit SB noch besser werden, da es jetzt möglich zu sein scheint, SB-Code viel einfacher zusammenzuführen.
Noch eine BEARBEITUNG: Wenn Sie eine Stunde Zeit haben, lehnen Sie sich zurück, entspannen Sie sich und hören Sie diesen Leuten zu, die über dieses Thema diskutieren (Ray Wenderlich & Co).
Edit 2016.1: Nachdem ich lange Zeit ein Verfechter des Storyboards war, hatte ich in den letzten Monaten so viel Ärger damit, dass ich mich entschied, Storyboards so weit wie möglich aufzugeben. Der Grund dafür ist, dass Apple Funktionen wie dumm hinzufügt, sich aber nicht um die Fehler und Mängel kümmert. Die Leistung mit vielen Einschränkungen für das automatische Layout ist wirklich schlecht (während der Entwurfszeit), und die Fehleranfälligkeit ist enorm geworden. Beispiel: Noch weniger komplexe Storyboards geraten direkt nach dem Öffnen eines Projekts in Xcode in einen "Dirty-Modus" (siehe Git-Status). Tipp: Als Anfänger werden Sie Storyboards lieben, da Sie schnell Prototypen erstellen und Dinge ohne viel Code zum Laufen bringen können. Wenn Sie in einen Zwischenzustand eintreten, fügen Sie Ihrem Projekt mehr GUI-Code hinzu. Jetzt geht es zwischen Code und SB hin und her - und es läuft schlimmer.
quelle
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 einerUIViewController
Unterklasse verbunden werden, indem Sie die Klasse des Dateibesitzers auf eine beliebige Unterklasse von festlegenUIViewController
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.
UITableView
( weitere Informationen )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
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
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.
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.
quelle
Es gab eine schöne Präsentation über StoryboardVor ein paar Monaten gab es auf dem LiDG-Treffen .
Persönlich würde ich sagen, dass dies der richtige Weg für eine neue App ist. Es gibt einige Lücken, insbesondere bei sehr komplexen Apps, aber die Vorteile überwiegen meistens die Nachteile.
quelle
Einige weitere Vorteile von Storyboards:
Nachteile sind:
Storyboards werden in XCode nur langsam gerendert, wenn sie viele Ansichts-Controller enthalten
Autolayout kann nicht für einen View Controller im Storyboard aktiviert werden.
quelle
Seien Sie vorsichtig, wenn Sie Storyboards verwenden, ist Ihre App nicht abwärtskompatibel mit älteren Betriebssysteminstallationen.
quelle
Ein Storyboard ist im Grunde ein Gerät, das Ihnen die Arbeit als Entwickler erleichtert. Es wird in eine Reihe von NIB-Dateien integriert, sodass die Leistung ziemlich gleichwertig ist. Als Entwickler ist es jedoch großartig, einen schnellen Überblick über Ihren gesamten Anwendungsfluss zu erhalten.
Ich beginne mit der Verwendung von Storyboards für neue Projekte, vorausgesetzt, ich kann den Client davon überzeugen, iOS 5 als Mindestversion zu akzeptieren. Dies liegt nur daran, dass ich es lieber so mache und weniger Zeit brauche, um die gleichen Aufgaben zu erledigen.
quelle
Ihre Einstellung zum automatischen Layout kann sich auch darauf auswirken, ob Sie Storyboards verwenden möchten. Mit xibs können Sie das automatische Layout pro xib aktivieren oder deaktivieren, um eine Mischung innerhalb Ihrer Anwendung zu ermöglichen, während Storyboards Ihre Auswahl auf ALLE darin enthaltenen Ansichten anwenden.
quelle
Sie sehen das große Ganze in einer Sekunde. Wenn Sie viele NIB-Dateien haben, sehen Sie nicht das große Ganze. Einfachere Pflege Ihrer Programme. Einfacher zu verstehen, andere Programme ... unter anderem.
quelle
Vorteile:
1) Es ist sehr schön, Schnittstellen zu entwerfen
2) Sie können StoryBoard-Segues verwenden, um Navigations- / Modalbeziehungen auf coole Weise zu identifizieren.
3) Wenn Ihre App mehrere Geräte unterstützt, ist dies eine gute Möglichkeit, verschiedene Ansichten zu organisieren.
4) Prototyping ist ein weiterer zusätzlicher Vorteil.
5) Der Prototyp UITableViewCell kann Zeit sparen und auch die Menge des Codes reduzieren.
6) Mit StoryBoard können Sie alle Bildschirme der App an einem Ort sehen.
7) Sie können die Beziehung zwischen ihnen leicht anzeigen
8) Wenn Sie an einem Code arbeiten, können Sie den Ablauf der App besser verstehen.
9) Sie können die Benutzeroberfläche für iPhone 4 und iPhone 5 einrichten, indem Sie den Retina-Formfaktor aus dem Storyboard anwenden, ohne die App immer wieder auszuführen.
10) Kunden können den Prototyp der App sehen, bevor sie mit der Entwicklung beginnen. Hier hilft Ihnen das Storyboard sehr.
Nachteile:
1) Es ist nur in iOS 5+ verfügbar
2) StoryBoardSegues sind ziemlich starr und Sie können prepareForSegue oft verwenden.
4) Wie IB, nicht sehr freundlich mit anderen Display-Engines und Toolkits.
4) Erschwert das Teilen von Designs für eine einzelne Ansicht oder einen Satz von Ansichten - Sie müssen alles oder nichts senden.
5) Für das Storyboard benötigen Sie einen großen Bildschirm, speziell für das iPad.
6) Schwierigkeiten beim Kopieren von Ansichten aus anderen Apps in das Storyboard.
7) Probleme im Storyboard, wenn mehrere Entwickler mithilfe des Git-Repositorys an demselben Projekt arbeiten
von einer Ressource kopiert
quelle
Storyboards haben viel mehr Probleme als Vorteile. Hier ist eine Liste ihrer Probleme, kopiert von iraycd :
Storyboards schlagen zur Laufzeit fehl, nicht zur Kompilierungszeit : Sie haben einen Tippfehler in einem Segue-Namen oder haben ihn in Ihrem Storyboard falsch verbunden? Es wird zur Laufzeit explodieren. Sie verwenden eine benutzerdefinierte UIViewController-Unterklasse, die in Ihrem Storyboard nicht mehr vorhanden ist? Es wird zur Laufzeit explodieren. Wenn Sie solche Dinge im Code tun, werden Sie sie während der Kompilierungszeit frühzeitig abfangen. Update : Mein neues Tool StoryboardLint löst dieses Problem größtenteils.
Storyboards werden schnell verwirrend : Wenn Ihr Projekt wächst, wird die Navigation in Ihrem Storyboard immer schwieriger. Wenn mehrere Ansichts-Controller mehrere Abschnitte zu mehreren anderen Ansichts-Controllern haben, sieht Ihr Storyboard schnell wie eine Schüssel Spaghetti aus, und Sie zoomen hinein und heraus und scrollen überall herum, um den gewünschten Ansichts-Controller zu finden für und um herauszufinden, welche Segue-Punkte wo. Update : Dieses Problem kann größtenteils gelöst werden, indem Sie Ihr Storyboard in mehrere Storyboards aufteilen , wie in diesem Artikel von Pilky und diesem Artikel von Robert Brown beschrieben .
Storyboards erschweren die Arbeit in einem Team : Da Sie normalerweise nur eine große Storyboard-Datei für Ihr Projekt haben, kann es Kopfschmerzen bereiten, wenn mehrere Entwickler regelmäßig Änderungen an dieser einen Datei vornehmen: Änderungen müssen zusammengeführt und Konflikte gelöst werden. Wenn ein Konflikt auftritt, ist es schwer zu sagen, wie er gelöst werden kann: Xcode generiert die Storyboard-XML-Datei und wurde nicht wirklich mit dem Ziel entwickelt, dass ein Mensch sie lesen oder gar bearbeiten müsste.
Storyboards machen Codeüberprüfungen schwierig oder nahezu unmöglich : Peer-Codeüberprüfungen sind eine großartige Sache für Ihr Team. Wenn Sie jedoch Änderungen an einem Storyboard vornehmen, ist es fast unmöglich, diese Änderungen mit einem anderen Entwickler zu überprüfen. Alles, was Sie aufrufen können, ist ein Unterschied zu einer riesigen XML-Datei. Es ist wirklich schwer zu entschlüsseln, was sich wirklich geändert hat und ob diese Änderungen korrekt sind oder ob sie etwas kaputt gemacht haben.
Storyboards behindern die Wiederverwendung von Code : In meinen iOS-Projekten erstelle ich normalerweise eine Klasse, die alle Farben und Schriftarten sowie Ränder und Einfügungen enthält, die ich in der gesamten App verwende, um ihr ein einheitliches Erscheinungsbild zu verleihen: Es ist eine einzeilige Änderung, wenn ich muss Passen Sie einen dieser Werte für die gesamte App an. Wenn Sie solche Werte im Storyboard festlegen, duplizieren Sie sie und müssen jedes einzelne Vorkommen finden, wenn Sie sie ändern möchten. Die Chancen stehen gut, dass Sie eines verpassen, da Storyboards nicht gesucht und ersetzt werden müssen.
Mit Storyboards können Sie alles zweimal erledigen : Erstellen Sie eine universelle App, die sowohl auf dem iPad als auch auf dem iPhone ausgeführt werden kann? Wenn Sie Storyboards verwenden, haben Sie normalerweise ein Storyboard für die iPad-Version und eines für die iPhone-Version. Um beide synchron zu halten, müssen Sie jede Änderung der Benutzeroberfläche oder des App-Workflows an zwei Stellen vornehmen. Yay. Update : In iOS 8 und Xcode 6 können Sie ein einzelnes Storyboard für iPhone und iPad verwenden.
Storyboards erfordern ständige Kontextwechsel : Ich arbeite und navigiere im Code viel schneller als in Storyboards. Wenn Ihre App Storyboards verwendet, wechseln Sie ständig Ihren Kontext: "Oh, ich möchte auf diese Tabellenansichtszelle tippen, um einen anderen Ansichts-Controller zu laden. Ich muss jetzt das Storyboard öffnen, den richtigen Ansichts-Controller finden und einen neuen Abschnitt erstellen Geben Sie dem anderen Ansichts-Controller (den ich auch finden muss) dem Segue einen Namen, merken Sie sich diesen Namen (ich kann keine Konstanten oder Variablen in Storyboards verwenden), wechseln Sie zurück zum Code und hoffen, dass ich den Namen nicht falsch eingebe das segue für meine prepareForSegue-Methode. Wie ich wünschte, ich könnte diese 3 Codezeilen genau hier eingeben, wo ich bin! " Nein, es macht keinen Spaß. Das Umschalten zwischen Code und Storyboard (sowie zwischen Tastatur und Maus) wird schnell alt und verlangsamt Sie.
Storyboards sind schwer umzugestalten : Wenn Sie Ihren Code umgestalten, müssen Sie sicherstellen, dass er immer noch den Erwartungen Ihres Storyboards entspricht. Wenn Sie Dinge in Ihrem Storyboard verschieben, werden Sie zur Laufzeit nur herausfinden, ob es noch mit Ihrem Code funktioniert. Es fühlt sich für mich so an, als müsste ich zwei Welten synchron halten. Es fühlt sich brüchig an und entmutigt meiner bescheidenen Meinung nach Veränderungen.
Storyboards können nicht durchsucht werden : Eine projektweite Suche in Xcode ist keine wirklich projektweite Suche, wenn Sie Storyboards verwenden. Sie werden nicht in die Suche einbezogen. Wenn Sie also eine benutzerdefinierte Klasse aus Ihrem Code entfernen oder umbenennen, müssen Sie das Storyboard manuell durchgehen oder das Roh-XML überprüfen, um sicherzustellen, dass es Ihren Codeänderungen entspricht. Nein, Sir, ich mag es nicht. Update : Storyboards können in Xcode 6 durchsucht werden.
Storyboards sind weniger flexibel : Im Code können Sie grundsätzlich alles tun, was Sie wollen! Mit Storyboards sind Sie auf eine Teilmenge dessen beschränkt, was Sie im Code tun können. Besonders wenn Sie einige fortgeschrittene Dinge mit Animationen und Übergängen tun möchten, werden Sie feststellen, dass Sie "gegen das Storyboard kämpfen", um es zum Laufen zu bringen.
Mit Storyboards können Sie den Typ der speziellen Ansichtssteuerungen nicht ändern : Sie möchten a
UITableViewController
in a ändernUICollectionViewController
? Oder in eine EbeneUIViewController
? In einem Storyboard nicht möglich. Sie müssen den alten Ansichts-Controller löschen, einen neuen erstellen und alle Segmente erneut verbinden. Es ist viel einfacher, eine solche Codeänderung vorzunehmen.Storyboards fügen Ihrem Projekt zwei zusätzliche Verpflichtungen hinzu : (1) Das Storyboard-Editor-Tool, das das Storyboard-XML generiert, und (2) die Laufzeitkomponente, die das XML analysiert und daraus UI- und Controller-Objekte erstellt. Beide Teile können Fehler enthalten, die Sie nicht beheben können.
In Storyboards können Sie keine Unteransicht zu einem hinzufügen
UIImageView
: Wer weiß warum.In Storyboards können Sie das automatische Layout für einzelne Ansichten (-Controller) nicht aktivieren : Durch Aktivieren / Deaktivieren der Option Auto Layout in einem Storyboard wird die Änderung auf ALLE Controller im Storyboard angewendet. (Danke an Sava Mazăre für diesen Punkt!)
Storyboards haben ein höheres Risiko, die Abwärtskompatibilität zu beeinträchtigen : Xcode ändert manchmal das Storyboard-Dateiformat und garantiert in keiner Weise, dass Sie Storyboard-Dateien öffnen können, die Sie heute in einigen Jahren oder sogar Monaten erstellen. (Dank an nachdenkliche Fortschritte für diesen Punkt. Siehe den ursprünglichen Kommentar )
Es ist McDonald's : Um es in Steve Jobs 'Worten über Microsoft zu sagen: Es ist McDonald's (Video) !
quelle
Vor iOS 7 waren Storyboards ordentlich, aber kein Muss. Sie führten so viele Probleme ein, wie sie lösten. iOS 7 neigte das Gleichgewicht zu Storyboards.
Mit iOS 8 und 9 ist dies keine Frage mehr: Verwenden Sie Storyboards!
Der Hauptnachteil von Storyboard ist, dass Sie vollständig von XCode abhängig sind und möglicherweise Stunden damit verbringen, Ihre Räder mit XCode-Fehlern zu drehen. Aber XCode ist viel besser geworden und die Vorteile von Storyboards sind jetzt zu zahlreich, um sie zu ignorieren. Zellenprototypen der Tabellenansicht, Größenklassen, Unterstützung für das automatische Layout usw.
Einige Hinweise:
quelle