2017-09-15 2 views
0

UINavigationController에 포함 된 뷰 컨트롤러가 거의 없습니다. 첫 번째보기 컨트롤러는 로그인 페이지입니다. 두 번째보기 컨트롤러는 홈 페이지입니다. 사용자가 이미 로그인 할 때 나는 두 번째보기 컨트롤러로 initialview 컨트롤러를합니다.UINavigationController에 포함 된 Intialview 컨트롤러 설정

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
{ 
    // Override point for customization after application launch. 
    if let data = Locksmith.loadDataForUserAccount(userAccount: "someString") 
    { 
     if let userAccessToken = data["accessToken"] 
     { 
      if (userAccessToken as! String) != "" 
      { 
       let initialViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "HomePageViewController") as! HomePageViewController 
       loginResponse = LoginResponse() 
       loginResponse?.UserAccessToken = userAccessToken as? String 
       self.window = UIWindow(frame: UIScreen.main.bounds) 
       self.window?.rootViewController = initialViewController 
       self.window?.makeKeyAndVisible() 
      } 
     } 
    } 
    return true 
} 

문제는 다음 뷰 컨트롤러를 탐색 컨트롤러에 포함되지 않은 것입니다. 탐색 컨트롤러에 내장되어 있지 않으므로 하나의보기 컨트롤러에서 다른 컨트롤러로 이동할 수 없습니다. 로그인 후 앱 위임이 코드

let mainStoryBoard = UIStoryboard(name: "Main", bundle: nil) 
let redViewController = mainStoryBoard.instantiateViewControllerWithIdentifier("respectiveIdentifier") as! ViewController 
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
appDelegate.window?.rootViewController = redViewController 
+0

당신은 HomePageViewController 컨트롤러 – Aditya

+0

의 스토리 보드에서 스토리 보드 식별자를 지정하는 그래, 난 당신이 한 번 'UIStoryboard (이름 : "메인", 번들 : Bundle.main)'시도 할 수 있습니다 스토리 보드 –

+0

의 ID를 지정하고 – Aditya

답변

1

,

먼저 확인 사용자가 이미 로그인 여부를 앱 위임이 추가 .

func checkForAlreadyLogin() { 
    let dashBoardScreen = UIStoryboard.dashBoardScreen() 
    let loginController = UIStoryboard.loginController() 

    if UserDefaults.standard.bool(forKey: UserDefaultValues().LOGINSTATUS){ 
     self.window!.rootViewController = dashBoardScreen 

    }else { 
     self.window!.rootViewController = loginController 
    } 

} 


public extension UIStoryboard { 
    class func mainStoryboard() -> UIStoryboard { return UIStoryboard(name: "Main", bundle: Bundle.main) } 

    class func dashBoardScreen() -> HomeViewController?{ 
     return mainStoryboard().instantiateViewController(withIdentifier: "HomeViewController") as? HomeViewController 
    } 

    internal class func loginController() -> LoginViewController?{ 
     return mainStoryboard().instantiateViewController(withIdentifier: "LoginViewController") as? LoginViewController 
    } 
} 

그냥 'didFinishLaunchingWithOptions'이 checkForAlreadyLogin() 메서드를 호출합니다.

또한 각 viewController에 대한 스토리 보드에 StoryboardID를 설정해야합니다.

+0

이 접근법의 문제점은 탐색 컨트롤러가 두 번째보기 컨트롤러에서 nil이된다는 것입니다. 이 내비게이션 컨트롤러를 사용하여 컨트롤러에 몇 가지 사항을 설정합니다. –

+0

@PrabuRaj 귀하의 이야기를 볼 수 있습니다 보드 스크린 샷 –

+0

스크린 샷을 추가했습니다 –

1

사용이를 실행하고 UIStoryboard의 확장을 추가하는 경우

enter image description here

+0

업데이트 된 코드를 확인할 수 있습니까? –

0

이 코드는 나를위한 트릭입니다.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
     // Override point for customization after application launch. 
     if let data = Locksmith.loadDataForUserAccount(userAccount: "someString") 
     { 
      if let userAccessToken = data["accessToken"] 
      { 
       if (userAccessToken as! String) != "" 
       { 
        let initialViewController = UIStoryboard(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "HomePageViewController") as! HomePageViewController 
        let navigationController = self.window?.rootViewController as! UINavigationController 
        navigationController.pushViewController(initialViewController, animated: true) 
       } 
      } 
     } 
     return true 
    }