2017-02-27 4 views
1

탭이 거의없는 TabBarController가 있습니다. 각 탭에는 TableView와 셀이있는 ViewController가있는 NavigationController가 있습니다. 사용자가 셀을 누르면 - 그는 DetailedViewController를 얻습니다.TabBarController에서 ViewController를 여는 푸시 알림 처리

내가 원하는 것은 - 내 앱이 푸시 알림을 받으면 DetailedViewController를 여는 것입니다.

내가 OneSignal과 AppDelegate에 내 didFinishLaunchingWithOptions를 사용처럼 보이는 (당신은 내가 DetailedViewController에 전달하고자하는 항목 ID를 가지고 참조)이 코드는 어떤 이유로 작동하지 않습니다

OneSignal.initWithLaunchOptions(
      launchOptions, 
      appId: API_KEY, 
      handleNotificationAction : { 
       (result) in 
        if additionalData!["itemID"] != nil { 
         let itemID = Int(additionalData!["itemID"] as! String) 
         if(itemID! > 0) { 

         if(self.window?.rootViewController?.presentedViewController != nil) { 
          self.window?.rootViewController?.presentedViewController?.dismiss(animated: true, completion: { 
           let storyboard = UIStoryboard(name: "Main", bundle: nil) 
           let tabBarController = storyboard.instantiateViewController(withIdentifier: "MainTabBarController") as! UITabBarController 
           tabBarController.selectedIndex = 1 
           self.window?.rootViewController?.present(tabBarController, animated: true, completion: nil) 
          }) 
         } 

        } 
       } 
       } 
     } 
    ) 
  1. - I 의 ViewController로 원하는 탭으로하지 않습니다 내가 바로 내가 FINA 때
  2. TabBarController
  3. 에서 DetailedViewController을 여는 방법을 모르는
  4. 필요 lly가 DetailedViewController에 도착할 것입니다. 다시 버튼을 누르면 어떻게됩니까? 항목 목록이있는 ViewController가 없었습니다.이 경우 어디에서 탐색할까요?
  5. 메모리를 잘 사용할 코드입니까?
+0

'rootViewController'를 삭제해야하는 이유가 있습니까? 단순히 원하는 탭 컨트롤러를 표시하지 않는 것이 어떻습니까? 그런 식으로, 적어도 당신의 뒤로 버튼이 작동합니다. (일단 다른 모든 것이 작동하면) –

+0

앱이 실행 중이고 알림을 받으면 - 내가 제시 한 ViewController를 닫지 않으면 어떻게 될까요? 더 많은 기억을 먹으면서 새로운 것을 열 것입니다 - 틀렸어? – moonvader

+0

rootViewController를 원하는 View Controller로 변경하십시오. – Mannopson

답변

1

이 시도 : 첫째로 당신의 TabBarController

let tabBarController = storyboard.instantiateViewController(withIdentifier: "MainTabBarController") as! UITabBarController 

를 인스턴스화하고 변경하려면 rootViewController

self.window = UIWindow.init(frame: UIScreen.main.bounds) 
    self.window?.rootViewController = tabBarController 
    self.window?.makeKeyAndVisible() 

당신은 또한 여기 tintColor 글로벌 사용자 정의 할 수 있습니다 : 마지막으로

self.window?.tintColor = UIColor.init(red: 0.0, green: 0.5, blue: 0.0, alpha: 1.0) 

을 선택한 색인을 설정하십시오 :

tabBarController.selectedIndex = 1 

그게 효과가 있습니다. 작동하는지 알려주세요!

let storyboard = UIStoryboard.init(name: "Main", bundle: nil) 
    let tabBarController = storyboard.instantiateViewController(withIdentifier: "MainTabBarController") as! UITabBarController 
    tabBarController.selectedIndex = 1 

    self.window = UIWindow.init(frame: UIScreen.main.bounds) 
    self.window?.tintColor = UIColor.init(red: 0.0, green: 0.5, blue: 0.0, alpha: 1.0) 
    self.window?.rootViewController = tabBarController 
    self.window?.makeKeyAndVisible() 
관련 문제