2016-12-26 97 views
-1

我在我的應用上使用推送通知。因此,當我收到通知並觸摸它時,我想要轉到另一個UITabbarcontroller,但是當我這樣做時,該應用只顯示UINavigationbar,而不是UITabbarcontroller。這是一個截圖 - >如何通過推送通知從AppDelegate打開特定的uitabbarcontroller?

enter image description here

這我的代碼。

  let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "RequestDriverViewController") as! RequestDriverViewController 

     let nc = UINavigationController(rootViewController: vc) 

     self.window = UIWindow(frame: UIScreen.main.bounds) 
     self.window?.rootViewController = nc 
     self.window?.makeKeyAndVisible() 
+0

請仔細閱讀章節「響應通知和事件」的文檔:https://developer.apple.com/reference/uikit/uiapplicationdelegate – matt

+0

您需要提供有關導航控制器/選項卡欄控制器層次結構的詳細信息。通常有一個sibfly標籤欄控制器,其中又包含幾個導航控制器,所以通常的做法是切換到所需的選項卡,可能會彈出不需要的視圖控制器,但您的具體情況可能完全不同...... – jcaron

+0

@ jcaron感謝您的評論,真的有很多幫助,我有很多工作,因此我看不到我應該先訪問UItabbarcontroller標識符,然後再發送給UIViewcontroller。所以這個我用來解決我的問題的代碼: 讓vc = UIStoryboard(name:「Main」,bundle:nil).instantiateViewController(withIdentifier:「TabBarIdentifier」)as!的UITabBarController self.window =的UIWindow?(幀:UIScreen.main.bounds) self.window .rootViewController = VC self.window .makeKeyAndVisible() 非常感謝 –

回答

-1

我能解決這個問題:

let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "TabBarIdentifier") as! UITabBarController 

     self.window = UIWindow(frame: UIScreen.main.bounds) 
     self.window?.rootViewController = vc 
     self.window?.makeKeyAndVisible() 
+0

如果標籤欄控制器已經存在,你很可能不應該實例化它,你應該簡單地檢索它並進行任何必要的更改(例如更改當前活動的標籤) – jcaron

+0

@jcaron然後,如果應用程序處於背景? ...我如何檢索它?對於這個我認爲這是必要的創建一個實例,但是我可以做一個「如果」驗證,如果應用程序是在後臺或否。如果是,則實例化,如果不是,則檢索它。 但是,我如何檢索這個UItabBarController? –

+0

使用你的窗口的'rootViewController'。檢查它不是零,並且它是一個'UITabBarController'的實例,然後使用它。 – jcaron

相關問題