webentwicklung-frage-antwort-db.com.de

Storyboards gegen den alten XIB-Weg

Ich bin neu in iOS und habe mich gefragt, welches am besten zu lernen ist. Ich habe einige der Antworten hier und SO gelesen, aber einige Leute sagen, dass sie Storyboards verwenden, andere sagen, dass sie zuerst XIBs lernen. Gibt es einen echten Vorteil beim Erlernen von XIBs? Sind XIBs leichter zu verstehen und helfen sie bei Storyboards?

55
cdub

Es gibt Dinge, die Sie mit einem Storyboard tun können, die Sie mit einer Feder nicht tun können. Mit einem Storyboard können Sie Segmente zwischen Ansichtscontrollern erstellen und Tabellenzellen direkt entwerfen.

Es gibt Dinge, die Sie mit einer Feder tun können, die Sie mit einem Storyboard nicht tun können. In einer Schreibfeder können Sie Verweise auf den Platzhalter Eigentümer der Datei erstellen. Sie können mehrere Ansichten der obersten Ebene erstellen, sie bearbeiten und Verbindungen zwischen ihnen herstellen. Siehe diese Antwort als Beispiel, warum Sie das tun möchten. Sie können externe Objektplatzhalter hinzufügen (eine selten verwendete Funktion).

Storyboards haben den Nachteil, dass sie eine Reihe verschiedener, lose zusammengehöriger Objekte in einer großen Datei zusammenfassen. Wenn Sie mit mehreren Entwicklern an einem Projekt arbeiten, ist die Wahrscheinlichkeit von Zusammenführungskonflikten bei Verwendung eines Storyboards größer als bei Verwendung von xib-Dateien.

Sie sollten auf jeden Fall irgendwann etwas über Federn lernen. Ob Sie mit ihnen oder mit einem Storyboard beginnen möchten, ist wahrscheinlich nicht allzu wichtig. Finden Sie einfach einige Tutorials, die Ihnen gefallen, und bearbeiten Sie sie mit dem jeweils verwendeten Dateityp (Schreibfeder oder Storyboard).

72
rob mayoff

Es ist von Vorteil, beide Ansätze zu lernen.

Neben dem historischen Wert des xib-Ansatzes bieten xibs auch Modularität. Vielleicht haben Sie eine Codebibliothek oder möchten ein nützliches Widget, das Sie erstellt haben, freigeben. Der xib-Ansatz würde das Teilen und Wiederverwenden erleichtern.

Der xib-Ansatz ermöglicht Ihnen auch eine größere Flexibilität in Bezug auf Ihren eigenen Code. Beispielsweise enthielt iOS 5 einen Fehler mit UITableView und Unterstützung für Eingabehilfen/VoiceOver, der dazu führte, dass -dequeueReusableCellWithIdentifier:nil zurückgab, obwohl dies anderweitig dokumentiert wurde (siehe dieser Blogeintrag) für weitere Details). Das dynamische Laden von Tabellensichtzellen aus xib bot die Möglichkeit, den Fehler zu umgehen.

Die Unterstützung für Tabellen und Tabellenzellen in Storyboards ist wunderbar und bietet Unterstützung für das, was die meisten Benutzer in einer Tabelle tun müssen. Manchmal müssen Sie jedoch außerhalb der Linien Farben einfügen. Möglicherweise benötigen Sie viele verschiedene Zellen Ihre Lösung.

Ein großer Vorteil von Storyboard ist die Möglichkeit, den GUI-Fluss Ihrer gesamten Anwendung anzuzeigen. Wenn Sie die Ansicht verkleinern, können Sie sehen, wie alles miteinander verbunden ist und fließt. Bei xibs ist die Modularität zwar gut, es ist jedoch schwieriger, sich vorzustellen, wie alles miteinander verbunden ist und zusammenfließt. Dies kann eine nützliche Funktion für Sie selbst sein oder wenn Sie ein größeres Team zum Teilen haben, damit andere sehen können, wie die App funktioniert.

Beide Ansätze sind von Nutzen, und es ist gut, beide zu kennen, damit Sie das beste Werkzeug für Ihre jeweilige Aufgabe auswählen können.

Update 06.10.2014 - Seit ich das Obige geschrieben habe, war ich an weiteren Projekten beteiligt. Einige mit xib, andere könnten Storyboards verwenden.

Storyboards sind sehr ausgereift (wir sind jetzt bei Xcode 6), und es gibt eine Menge davon, die so schön ist. Ich finde es wirklich toll, wie viel mehr in einem Storyboard möglich ist, das in einem xib-Ansatz etwas komplizierter ist. Einige Beispiele:

Eine ist, wenn Sie mit UITableView oder UICollectionView arbeiten, wie viel Sie mit Prototypzellen direkt im Storyboard arbeiten können. Eine Menge nette und einfache Einrichtung, die meisten der schweren Hebe kann im Storyboard sein, weniger Code. Es ist ganz nett. Der Versuch, dies im xib-Ansatz zu tun, ist sicherlich machbar, aber es gibt noch viel mehr Arbeit, um dies zu erreichen.

Ein weiterer Grund ist, wie gut Sie zwischen UIViewControllers mit den regulären Segmenten wechseln und dann mit den Abwicklungssegmenten zurückkehren können. Alles klar im Storyboard, mit minimalem Code. Es ist einfach so praktisch.

Aber das einzige, was Storyboards für mich immer noch tötet, ist der Versuch, sie in kollaborativen Umgebungen zu verwenden. Es wird einfach nicht gut verschmelzen. Und in gewisser Hinsicht ist es nicht einmal so, wenn Sie in einem Team von> 1 Person arbeiten. Wenn Sie selbst die Versionskontrolle nutzen, ein gutes Verzweigungs- und Zusammenführungsmodell für Ihren persönlichen Arbeitsablauf verwenden, kann es vorkommen, dass Änderungen in einem Zweig vorgenommen werden müssen, der in einen anderen Zweig übernommen werden muss, und oh der Schmerz. Für mich tötet dies Storyboards.

Da sich Zeit und Arbeit weiterentwickelt haben, finde ich, dass Storyboards großartig für das Prototyping sind. Die Fähigkeit, Dinge schnell zum Laufen zu bringen, ist ein großer Vorteil von Storyboards. Ihre Verwendung ist sehr schnell. Aber die Geschwindigkeit geht zu Lasten. Wenn es darum geht, den "echten" Code für ein Projekt zu schreiben, halte ich mich einfach an xibs, weil es zwar mehr Arbeit ist, aber eine flexiblere Route ist, die in größeren Teams oder im Laufe der Zeit besser funktioniert.

Update 2015-04-07 Ein weiteres Update, weil mich die Projekte der letzten Monate gezwungen haben, Storyboards zu verwenden, was mir mehr Einblicke verschafft hat.

Erstens erfordern einige Dinge den einen oder anderen Ansatz. Zum Beispiel gab es anscheinend einige Edge-Case-Fehler beim Arbeiten mit Größenklassen in xibs, die es in einem Storyboard nicht gab. Wenn Sie also von Fehlern betroffen sind, kann dies Ihre Hand auf die eine oder andere Weise zwingen. Eine andere Möglichkeit ist, sich daran zu erinnern, dass Storyboards im Allgemeinen auf der Ebene UIViewController funktionieren. Wenn Sie also beispielsweise ein UIView oder ein UICollectionViewCell laden müssen, ist dies wahrscheinlich der Fall besser mit einem xib bedient.

Zweitens, und ich weiß nicht, warum mir das anfangs nicht aufgefallen ist, aber es gibt nichts das erfordert, dass Sie ein einzigartiges Storyboard für Ihr gesamtes Projekt verwenden! Ich denke, die Natur des Storyboards ermöglicht es den Menschen, sich auf diese Weise zu bewegen, aber wir müssen uns an nichts erinnern, was dies erfordert (was mir bewusst ist).

Ich habe festgestellt, dass es gut funktioniert, wenn man sich im Allgemeinen jeder "Ansichtsgruppierung" pro Storyboard nähert. Das bedeutet, dass Ihre ViewController häufig isoliert sind und 1 pro Storyboard (oder xib) ergeben. Es kann jedoch vorkommen, dass Sie über zwei eng miteinander verbundene ViewController verfügen, und es ist sinnvoll, sie in dasselbe Storyboard einzufügen, vor allem, weil Sie dann problemlos Dinge zwischen ihnen anschließen können, z. B. Übergänge.

Der Hauptvorteil für mehrere Storyboards? In Teams arbeiten. Auf diese Weise kann Fred an seinem Storyboard und Wilma an ihrem Storyboard arbeiten, und es gibt keine großen Bedenken hinsichtlich Zusammenführungsproblemen oder der Arbeitskoordination! Die Verwendung mehrerer Storyboards (und im Allgemeinen 1 ViewController pro Storyboard) war eine große Hilfe bei der Verwendung von Storyboards in einem Entwicklerteam mit mehreren Personen.

Es ist ziemlich offensichtlich, dass Apple wir Storyboards bevorzugen möchten, und ich nehme sie heutzutage mehr an. Die Verwendung mehrerer Storyboards, aber bei Bedarf immer noch ein XIB, funktioniert jetzt recht gut.

Update 2015-09-21 Jetzt, da Apple den Xcode 7 veröffentlicht hat, gibt es ihn Noch mehr Gründe, Storyboards einzuführen, da Apple daran arbeitet, die Mängel zu beseitigen.

Die wichtigste Verbesserung ist Storyboard-Verweise, mit dem Sie in einem Storyboard einen Verweis auf ein anderes Storyboard erstellen können. Es ist kinderleicht zu erstellen und jetzt können Sie übergreifende Storyboard-Segmente erstellen (sowohl Eingang als auch Ausgang). Ich habe das schon einige Male bei einem neuen Projekt verwendet und es ist einfach eine Freude.

Eine weitere Verbesserung besteht darin, dass Sie eigenständige UIView Klassen in einem Storyboard erstellen können. Zum jetzigen Zeitpunkt hatte ich jedoch gemischte Ergebnisse. Einfache Fälle klappen, aber etwas komplizierteres nicht. Zum Beispiel hatte ich ein UIViewController mit einem UITableView darin. Da es sich um eine einfache Tabelle mit 5 statischen Zellen handeln sollte, habe ich die 5 UITableViewCells lediglich als Teil des ViewControllers im Storyboard instanziiert. Schien zu funktionieren, aber dann würde zur Laufzeit tatsächlich nichts geladen und angezeigt werden. Verschob die UITableViewCells in eine xib und alles funktionierte. Ich bin mir nicht sicher, ob ich etwas falsch gemacht habe oder was es sein könnte, also YMMV. Aber selbst wenn es nur ein paar Macken gibt, bin ich mir sicher, dass Apple sie mit der Zeit lösen und dann eine weitere Barriere gegen Storyboards fallen wird. Ich würde sagen, wenn Sie solche Unterstützung brauchen, sollten Sie es versuchen und sehen, wie es für Sie läuft. Es gibt ein großes Versprechen.

Storyboards werden immer besser.

163
hsoi