通过initWithRootViewController以外的方法设置UINavigationController的rootViewController

drc*_*drc 69 uitoolbar uinavigationcontroller ios iphone-5

我如何设置rootViewControllerUINavigationController比其他的方法initWithRootViewController

我想使用initWithNavigationBarClass:toolbarClass:为我的NavigationController提供自定义工具栏,所以我认为我不能使用initWithRootViewController.

Leo*_*die 134

你可以通过电话解决这个问题setViewControllers.

像这样:

UINavigationController *navigationController = [[UINavigationController alloc] initWithNavigationBarClass:[MyNavigationBar class] toolbarClass:[UIToolbar class]];

[navigationController setViewControllers:@[yourRootViewController] animated:NO];
Run Code Online (Sandbox Code Playgroud)


Arv*_*ind 25

使用Swift进行知识共享:

从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
Run Code Online (Sandbox Code Playgroud)

希望这对某人有帮助.

编辑:

更改rootviewcontroller使用动画可以实现:

 UIView.transitionWithView(self.window!, duration: 0.5, options: UIViewAnimationOptions.TransitionFlipFromLeft, animations: {
    self.window?.rootViewController = anyViewController
}, completion: nil)
Run Code Online (Sandbox Code Playgroud)

我们可以编写与此类似的泛化方法.


Pat*_*gar 12

这个对我有用,希望对你有帮助,

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
Run Code Online (Sandbox Code Playgroud)