Verschieben oder kopieren Sie den View Controller von einem Storyboard in ein anderes

Antworten:

150

Ja, es ist möglich.

  1. Wählen Sie die Controller aus, die Sie kopieren möchten
  2. Drücken Sie Command+C
  3. Öffnen Sie Ihre zweite Storyboard-Datei
  4. Drücken Sie Command+V

Hinweis: "IBOutlets bleiben nach dem Kopieren unverändert (überprüft unter Xcode 6.3.2)."

Rahul Wakade
quelle
1
Das ist ausgezeichnet. Ich hatte Probleme, als ich mein Storyboard manuell in den Finder kopierte und es von einem Apple-Beispielprojekt in mein eigenes Projekt kopierte. Die Probleme verschwanden, als ich das Storyboard im Zielprojekt erstellte, den Inhalt kopierte und einfügte. Seltsam.
Vern Jensen
1
Es funktioniert Lösung @Fady Kamal. Manchmal funktioniert es nicht vom ersten Mal an - es hängt davon ab, wo der Fokus auf X-Code liegt.
New2ios
2
Ok, @Rahul, aber was passiert mit Steckdosen - sind sie richtig eingestellt oder muss ich sie neu verknüpfen?
New2ios
1
Sie können auch versuchen, zu duplizieren. Befehl + D oder Bearbeiten-Duplizieren macht die Magie!
AG
1
Bestätigt funktioniert immer noch in Xcode 8.3.2. IBOutlets, IBActions und Storyboard-IDs werden alle perfekt kopiert. Ich habe jedoch keine Segmente unterbrochen, was bedeutet, dass ich am Ende eines Segues keinen View Controller entfernt und in ein anderes Storyboard eingefügt habe. Ich habe Segues kopiert, aber nur dort, wo ich den Ursprungsansichts-Controller und den
Zielansichts-
36

Es ist möglich zu kopieren, aber Sie müssen beide Storyboards gleichzeitig in einem Projekt öffnen und dann kopieren und einfügen.

AndrewK
quelle
9
Dies ist eigentlich das, was mein Problem löst. BEIDE Storyboards müssen mit dem Editor-Assistenten geöffnet werden! Vielen Dank!
Chen Li Yong
33

Wenn Sie in Xcode 8 speziell View Controller in ein anderes Storyboard verschieben möchten, wählen Sie einfach die View Controller aus, die Sie mit Cmd verschieben möchten, und klicken Sie auf den View Controller. Lassen Sie sie ausgewählt, gehen Sie zur Registerkarte Editor und wählen Sie Refactor to Storyboard. Sie werden nach dem Namen der neuen Storyboard-Datei gefragt und die Eingabetaste gedrückt.

Eine neue Storyboard-Datei wird mit Ihren ausgewählten View-Controllern erstellt. Im Main.storyboard sehen Sie anstelle dieses Ansichts-Controllers ein Storyboard-Referenzobjekt, das Ihre Referenz auf das neue Storyboard ist, das Sie gerade erstellt haben.

Dunkle Unschuld
quelle
Das ist sehr hilfreich. Im Gegensatz zu anderen Methoden bleiben alle vorhandenen Beziehungen und Segmente erhalten.
Hobo Joe
Sie können jedoch kein vorhandenes Storyboard umgestalten?
David
6

Das Kopieren und Einfügen (Befehl + C, Befehl + V) funktioniert einwandfrei. Denken Sie jedoch daran, die Steckdosenverbindungen aufzulösen, da Xcode die ursprünglichen Verbindungen beizubehalten scheint: Schließen Sie das Projekt / öffnen Sie es erneut, löschen Sie die Fehler und stellen Sie fehlende Verbindungen wieder her.

Lubos Ilcik
quelle
2

Das Kopieren / Einfügen ist möglich, funktioniert jedoch nur, wenn beide Storyboards mit dem Xcode-Assistenten-Editor nebeneinander geöffnet sind.

Marcos Reboucas
quelle
1

Wenn die Verwendung von Ausschneiden und Einfügen für Sie fehlschlägt, gibt es eine Problemumgehung. Das Einfügen schlägt fehl, wenn sich jetzt ViewController in der Datei befindet, die eingefügt wird. Dadurch ist es unmöglich, das Storyboard zum Einfügen auszuwählen. XCode weigert sich einzufügen. Sie müssen also zuerst einen leeren Ansichts-Controller aus der Bibliothek in das Storyboard ziehen. Wählen Sie dann diesen viewController im Storyboard aus und das Einfügen funktioniert. Nachdem Sie fertig sind, können Sie den Dummy-ViewController löschen. Du wirst es nicht wieder brauchen.

nishant
quelle
0

Schnittstellenelemente können über Kopieren / Einfügen zwischen Xib- und Storyboard-Dateien verschoben werden .

Das hat ursprünglich bei mir nicht funktioniert. Ich habe versucht, eine UICollectionViewCell von einer dedizierten Xib in unser Haupt-Storyboard zu kopieren. Die Zelle würde nicht in das Storyboard kopiert.

Die Lösung bestand darin, das spezifische übergeordnete Element im Storyboard auszuwählen. Die UICollectionViewCell kann als untergeordnetes Element einer UICollectionView in das Storyboard eingefügt werden, kann aber ansonsten nicht eingefügt werden.

Wenn Sie Probleme beim Einfügen eines bestimmten Elements haben, stellen Sie sicher, dass Sie ein gültiges übergeordnetes Element ausgewählt haben, bevor Sie versuchen, es einzufügen.

pkamb
quelle
0

Ich bin auf eine ähnliche Situation gestoßen, in der ich in meinem Haupt-Storyboard zu viele Szenen habe und umgestalten muss. Die Idee, die ich am Anfang hatte, war, mehrere zu markieren und zu kopieren und einzufügen, wie von vielen vorgeschlagen. Ich war jedoch besorgt über die Auflösung von Storyboard-Verbindungen zum View Controller-Code. Nach langem Suchen stellte ich fest, dass seit iOS 9 eine neue Funktion für "Refactor to Storuboard" verfügbar ist. Sie können mehrere Szenen in Ihrem Quell-Storyboard markieren und diese Option im Menü Editor auswählen. Dann werden alle ausgewählten Szenen aus Ihrem alten Storyboard extrahiert, ein neues Storyboard erstellt sowie ein Link zu dem im alten / Haupt-Storyboard. Nützliche Totorials sind: https://code.tutsplus.com/tutorials/ios-9-staying-organized-with-storyboard-references--cms-24226 https://www.raywenderlich.com/115697/ios-9-storyboards-tutorial-whats-new-in-storyboards

Ich hoffe, dass diese neue offizielle Storyboard-Refactoring-Funktion eine bessere Lösung für diese Art von Problemen bieten kann.

Konstantinos
quelle
-2

Ich denke es ist möglich ....

UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"secondStoryBoard" bundle:nil];

UIViewController *theTabBar = [secondStoryBoard instantiateViewControllerWithIdentifier:@"myTabBar"];

[self.navigationController pushViewController:theTabBar animated:YES];
Dhaya
quelle
Ich meine, Viewcontroller-Szene zwischen Storyboards in Xcode zu verschieben
Vladimir Berezkin
Die Frage war, VC in Storyboard zu verschieben / zu kopieren. Ich glaube nicht, dass Ihre Antwort irgendwo dieses Problem löst.
Alix