Ich versuche, meine App für einen bestimmten ViewController zu öffnen, der tief in einen Navigationscontroller eingebettet ist, aber nicht der RootViewController ist. Ich habe im App-Delegaten didFinishLaunchingWithOptions versucht, Folgendes hinzuzufügen:
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let initialViewController = storyboard.instantiateViewControllerWithIdentifier("NavViewController")
self.window?.rootViewController = initialViewController
self.window?.makeKeyAndVisible()
Dies geht jedoch an den Root View Controller. Ich habe versucht, diese Zeile zu ändern in:
storyboard.instantiateViewControllerWithIdentifier("MainViewController")
Und dies öffnet für den richtigen Ansichtscontroller, aber oben befindet sich keine Navigationsleiste, die zum Navigieren in der App erforderlich ist.
2 Antworten
Um von AppDelegate
auf rootViewController
zuzugreifen, ist hier der Code:
let rootViewController = application.windows[0].rootViewController as! UINavigationController
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let notificationVC = mainStoryboard.instantiateViewControllerWithIdentifier("identifier") as! NotificationVC
rootViewController.pushViewController(notificationVC, animated: false)
Jetzt wird es das navigationBar
haben. Lassen Sie mich wissen, wenn Sie immer noch vor dem Problem stehen. Vielen Dank.
Hier ist die Objective-C-Version zum Öffnen eines bestimmten UIViewController
, das tief in einen UINavigationController
eingebettet ist (der nicht der rootController ist).
Wenn wir das @ bdc-Beispiel in Kommentaren nehmen und UIViewController
öffnen möchten D:
- A: rootViewController
- N: Navigationscontroller
- B, C, D: In N eingebettete UIViewController
- A -> N [B C D]
Setzen Sie storyboardId
in InterfaceBuilder für jedes UIViewController
oder UINavigationController
in der Hierarchie durch D.
In AppDelegate ist der Code einfach. Sie müssen nur alles instanziieren und mit UINavigationController
alle UIViewController
in Ihrer Hierarchie verschieben.
// Instanciate from storyboard with identifiers
UIStoryboard * storyboard = [UIStoryboard storyboardWithName:@"MyStoryboard" bundle:nil];
UINavigationController * N = (UINavigationController*) [storyboard instantiateViewControllerWithIdentifier:@"N"];
UIViewController* B = (UIViewController*) [storyboard instantiateViewControllerWithIdentifier:@"B"];
UIViewController* C = (UIViewController*) [storyboard instantiateViewControllerWithIdentifier:@"C"];
UIViewController* D = (UIViewController*) [storyboard instantiateViewControllerWithIdentifier:@"D"];
// Set up the views hierarchy
self.window.rootViewController = N;
[N pushViewController:B animated:NO];
[N pushViewController:C animated:NO];
[N pushViewController:D animated:YES];
[self.window makeKeyAndVisible];
Hoffe das wird helfen.
Neue Fragen
xcode
Xcode ist Apples integrierte Entwicklungsumgebung (IDE). VERWENDUNGSHINWEIS: Verwenden Sie dieses Tag nur für Fragen zur Xcode-IDE selbst und nicht für allgemeine Programmierthemen für Mac oder iOS. Verwenden Sie [cocoa] für Fragen zur Mac-Programmierung und [cocoa-touch] oder [iOS] oder [Swift] für Fragen zur iOS-Programmierung.