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.

1
bdc 4 Jän. 2016 im 09:14

2 Antworten

Beste Antwort

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.

1
Sohil R. Memon 4 Jän. 2016 im 07:10

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.

0
Community 20 Juni 2020 im 09:12