2016-12-13 8 views
1

Я разрабатываю приложение на основе UITabbar и иерархии представлений следующим образом.Доступ к UIViewController от UITabBarController и UINavigationController

UITabBarController ----> UINavigationController ----> UIViewController

У меня есть полезный груз уведомления толчка, который будет открывать определенную UIViewController, я могу явно открытого UIViewController непосредственно с помощью контроллера вида раскадровки ID, но TabBar и Navbar выиграли» т шоу. Как я могу перейти к определенному контроллеру View и показать TabBar и NavController из AppDelegate didReceiveRemoteNotifications.

Спасибо!

+0

Не могли бы вы проверить мой ответ? –

+0

уверен, у меня есть еще несколько вопросов для вас @FedericoMalagoni – chronycles

ответ

1

Вы должны инстанцировать все ваши VC и установить все из них, как корень своего предшественника:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

    let mainStoryboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
    let yourVC = mainStoryboard.instantiateViewControllerWithIdentifier("YourVC_Identifier"); 
    let yourNavController = mainStoryboard.instantiateViewControllerWithIdentifier("YourNAV_Identifier") as! UINavigationController 
    let yourTabController = mainStoryboard.instantiateViewControllerWithIdentifier("YourTAB_Identifier") as! UITabBarController 

    yourNavController.setViewControllers([yourVC], animated: false) 
    yourTabController.setViewControllers([yourNavController], animated: false) 


    self.window = UIWindow(frame: UIScreen.mainScreen().bounds) 
    self.window?.rootViewController = yourTabController 
    self.window?.makeKeyAndVisible() 



    return true 
} 
+0

привет @Federico Malagoni, ваш ответ потрясающий, код работает так, как я ожидал, но похоже, что я не могу использовать popToRootViewController после запуска VC. почему это? – chronycles

+0

Я не понял ваш вопрос. Не могли бы вы создать новый вопрос? –

0

[[UIApplication sharedApplication] keyWindow] имеет свойство .rootViewController. Предположительно, это ваша панель вкладок. На этом контроллере вы можете установить активную вкладку и выключить контроллеры просмотра с помощью свойства .viewControllers. Предположим, что один из них - ваш UINavigationController, который также должен иметь свойство .rootViewController. Создайте сценарий из раскадровки и либо установите корень, либо нажмите контроллер вида сверху навигационного контроллера.

+0

Не могли бы вы показать псевдокод в быстром, пожалуйста? Спасибо – chronycles

0

Следуйте иерархии из App делегата программно. В случае, если ваша точка входа находится на раскадровке, установите UIWindow в AppDelegate, чтобы вы могли установить UITabBarController следующим образом.

//self.tabBarController is you TabBar from Storyboard, or programatically initialized 
self.window.rootViewController = self.tabBarController; 

Тогда всякий раз, когда у вас есть уведомление в didReceiveRemoteNotifications рода уведомление путем типа, и найти контроллер вида:

//Let's say the View Controller being accessed is in the first position of the stack of viewcontroller from UITabBarController & UINavigationController 
UINavigationController *navViewController = self.tabBarController.viewControllers.firstObject; 
UIViewController *accessedViewController = navViewController.viewcontroller.firstObject; 
Смежные вопросы