Wie setze ich das rootViewController
von UINavigationController
mit einer anderen Methode als initWithRootViewController
?
Ich möchte initWithNavigationBarClass:toolbarClass:
eine benutzerdefinierte Symbolleiste für meinen NavigationController bereitstellen, daher glaube ich nicht, dass ich sie verwenden kann initWithRootViewController
.
Antworten:
Sie können dies lösen, indem Sie anrufen
setViewControllers
.So was:
UINavigationController *navigationController = [[UINavigationController alloc] initWithNavigationBarClass:[MyNavigationBar class] toolbarClass:[UIToolbar class]]; [navigationController setViewControllers:@[yourRootViewController] animated:NO];
Schnelle Version:
let navigationController = UINavigationController(navigationBarClass: MyNavigationBar.self, toolbarClass: UIToolbar.self) navigationController.setViewControllers([yourRootViewController], animated: false)
quelle
navigationController.navigationBar.tintColor = [UIColor blackColor];
oder wie auch immer Sie es in den-(void)viewDidAppear:animated:
Methoden Ihrer ViewControllerdrawRect
Anpassung überschreibt , aber es ist die Standardmethode zum Überschreiben derUIToolbar
Eigenschaften von aUINavigationController
.Wissensaustausch mit Swift:
Ändern des Root-View-Controllers von einer anderen Klasse als app delegate.swift
let appdelegate = UIApplication.sharedApplication().delegate as! AppDelegate let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) var homeViewController = mainStoryboard.instantiateViewControllerWithIdentifier("HomeViewController") as! HomeViewController let nav = UINavigationController(rootViewController: homeViewController) appdelegate.window!.rootViewController = nav
Hoffe das wird jemandem helfen.
Bearbeitet:
Das Ändern des Rootviewcontrollers mit Animation kann erreicht werden mit:
UIView.transitionWithView(self.window!, duration: 0.5, options: UIViewAnimationOptions.TransitionFlipFromLeft, animations: { self.window?.rootViewController = anyViewController }, completion: nil)
Wir können eine ähnliche Verallgemeinerungsmethode schreiben .
quelle
Dieser funktioniert für mich, hoffe es hilft dir,
let rootVC:LoginViewController = self.storyboard?.instantiateViewControllerWithIdentifier("LoginViewController") as! LoginViewController let nvc:UINavigationController = self.storyboard?.instantiateViewControllerWithIdentifier("RootNavigationController") as! UINavigationController nvc.viewControllers = [rootVC] UIApplication.sharedApplication().keyWindow?.rootViewController = nvc
quelle
In Swift 3.0 xcode8.1
in allgemeinen Einstellungen in Hauptschnittstelle löschen: Haupt <-dies nach Hauptschnittstelle:
class AppDelegate... var window: UIWindow? fun application... window = UIWindow(frame: UIScreen.main.bounds) window?.makeKeyAndVisible() window?.rootViewController = UINavigationController(rootViewController: NewYourController)
quelle
let storyboard = UIStoryboard(name: "Main", bundle: nil) let yourNewRootView = storyboard.instantiateViewControllerWithIdentifier("yourNewRootView") as? yourNewRootView self.window = UIWindow(frame: UIScreen.mainScreen().bounds) UIView.transitionWithView(self.window!, duration: 0.1, options: [UIViewAnimationOptions.TransitionFlipFromRight,UIViewAnimationOptions.TransitionFlipFromLeft], animations: { // animation }, completion: { (finished: Bool) -> () in self.window?.rootViewController = nil self.window?.rootViewController = yourNewRootView self.window?.makeKeyAndVisible() })
quelle