webentwicklung-frage-antwort-db.com.de

Zu einem anderen Storyboard wechseln?

Ist es möglich, von einem Storyboard zu einem anderen zu wechseln oder ein Storyboard in einen View Controller in einem anderen Storyboard einzubetten? Ich muss ein UITabBarController in ein UINavigationController einfügen, und ich möchte sie schön und getrennt halten.

131
Ry-

Ja, aber Sie müssen es programmgesteuert tun:

// Get the storyboard named secondStoryBoard from the main bundle:
UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"secondStoryBoard" bundle:nil];

// Load the initial view controller from the storyboard.
// Set this by selecting 'Is Initial View Controller' on the appropriate view controller in the storyboard.
UIViewController *theInitialViewController = [secondStoryBoard instantiateInitialViewController];
//
// **OR**  
//
// Load the view controller with the identifier string myTabBar
// Change UIViewController to the appropriate class
UIViewController *theTabBar = (UIViewController *)[secondStoryBoard instantiateViewControllerWithIdentifier:@"myTabBar"];

// Then Push the new view controller in the usual way:
[self.navigationController pushViewController:theTabBar animated:YES];
200
lnafziger

Ab Xcode 7 können Sie dies mithilfe einer Storyboard-Referenz grafisch ausführen:

reference

Fügen Sie Ihrem Storyboard eine Storyboard-Referenz hinzu. Erstellen einer Trennlinie zwischen ViewController und Storyboard-Referenz (Strg + Ziehen)

Dann füllen Sie diese Felder aus.

enter image description here

Wobei "Tutorial" die Datei "Tutorial.storyboard" ist und "MainTutorialController" das Feld "Storyboard-ID" in ViewControllerSettings ist

115
milczi

Sie können Segues nicht wirklich manuell ausführen, da UIStoryboardSegue eine abstrakte Klasse ist. Sie müssen es in Unterklassen unterteilen und perform implementieren, damit es etwas bewirkt. Sie sollen wirklich in Storyboards erstellt werden. Sie können den Ansichtscontroller jedoch manuell verschieben, was eine gute Lösung ist. Die Antwort von lnafziger macht das gut:

UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"secondStoryBoard" bundle:nil];
UIViewController *theTabBar = [secondStoryBoard instantiateViewControllerWithIdentifier:@"myTabBar"];
[self.navigationController pushViewController:theTabBar animated:YES];

Eine Sache zu beachten ist jedoch, dass Sie gesagt haben, Sie wollen die Dinge schön und getrennt halten. Die Idee von Storyboards ist, dass Sie die Dinge getrennt halten können, während Sie Ihre gesamte Designarbeit an einem Ort erledigen. Jeder View Controller ist nett und innerhalb des Storyboards von den anderen getrennt. Die ganze Idee ist es, alles an einem Ort zu halten. Legen Sie es einfach so aus, dass es organisiert ist, und Sie können loslegen. Sie sollten es nicht trennen, es sei denn, Sie haben einen wirklich guten Grund, dies zu tun.

10
wbyoung

Sie sollten UITabBarController nicht in einem UINavigationController platzieren. Es fragt nach Fehlern wie falscher Autorotation/View-Entladung usw., wie Apple nterstützt nicht diese Art von Containment:

Beim Kombinieren von Ansichts-Controllern ist jedoch die Reihenfolge der Eingrenzung wichtig. es gelten nur bestimmte vereinbarungen. Die Reihenfolge der Einschließung von Kind zu Elternteil ist wie folgt:

  • Inhaltsansichts-Controller und Containeransichts-Controller mit flexiblen Grenzen (z. B. der Seitenansichts-Controller)
  • Navigationsansicht-Controller
  • Tab Bar Controller
  • Split View Controller
7
Danra

Hier ist eine Swift Version:

let targetStoryboardName = "Main"
let targetStoryboard = UIStoryboard(name: targetStoryboardName, bundle: nil)
if let targetViewController = targetStoryboard.instantiateInitialViewController() {
    self.navigationController?.pushViewController(targetViewController, animated: true)
}
4
DudeOnRock