it-swarm.com.ru

Установите rootViewController для UINavigationController с помощью метода, отличного от initWithRootViewController

Как установить rootViewController для UINavigationController с помощью метода, отличного от initWithRootViewController?

Я хочу использовать initWithNavigationBarClass:toolbarClass: для доставки настраиваемой панели инструментов для моего NavigationController, поэтому я не думаю, что могу использовать initWithRootViewController.

66
drc

Вы можете решить эту проблему, вызвав setViewControllers.

Как это:

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

[navigationController setViewControllers:@[yourRootViewController] animated:NO];
130
Leon Lucardie

Обмен знаниями с помощью Swift:

Изменение корневого контроллера представления из класса, отличного от делегата приложения. 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

Надеюсь, это будет полезно для кого-то.

Отредактировано:

Смена rootviewcontroller с помощью Animation можно добиться с помощью:

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

Мы можем написать обобщающий метод, слишком похожий на this.

24
Arvind

это работает для меня, надеюсь, это поможет вам,

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
11
Patel Jigar

В Swift 3.0 xcode8.1

в общих настройках удалить в главном интерфейсе: основной <-это после основного интерфейса:

class AppDelegate...

 var window: UIWindow?

    fun application...

      window = UIWindow(frame: UIScreen.main.bounds)
      window?.makeKeyAndVisible()
      window?.rootViewController = UINavigationController(rootViewController: NewYourController)
2
Anton Russia