2

Является новым для Swift и раскадровки. Сначала я должен показать страницу входа и страницу входа в UITabBarController. После того, как пользователь запомнил данные для входа, я должен проверить данные входа в AppDelegate и показать UITabBarController напрямую, если пользователь уже зарегистрировался. Я затронул некоторые вопросы SOF, но не получил результат.Swift 2: Как загрузить UITabBarController после отображения LoginViewController

Я разработал LoginViewController, встроенный в UINavigationController. И у меня есть один UITabBarController с 2 viewcontrollers. Я установил LoginViewController как inititialViewController в раскадровке. Таким образом, loginview отображается в в первый раз. Но я не знаю, как нажать UITabBarController на экране входа в систему (действие кнопки входа в систему). Также я не знаю, как проверить и загрузить логин и табуляцию

соответственно из appDelegate.

Может ли кто-нибудь мне помочь? Заранее спасибо.

@IBAction func loginButtonAction (button : UIButton) { 

     if isRemeberLogin == true { 
      let loginClass = LoginModelClass(userNameValue: (usernameTF?.text)!, passwordValue: (passwordTF?.text)!) 
      print("Remembering Login Details: \(loginClass.userName, loginClass.passWord)") 

     } 

     let homeVC = self.storyboard?.instantiateViewControllerWithIdentifier("HomeViewController") as! HomeViewController 
     let collectionVC = self.storyboard?.instantiateViewControllerWithIdentifier("ItemsCollectionViewController") as! ItemsCollectionViewController 


     //self.navigationController?.pushViewController(homeVC, animated: true) 

     let tabBarController = self.storyboard?.instantiateViewControllerWithIdentifier("TabBarController") as! UITabBarController 

     print("TABBAR \(tabBarController)") 
     let viewControllersArray = [homeVC, collectionVC]; 
     // tabBarController?.viewControllers = viewControllersArray 

     self.navigationController?.pushViewController(tabBarController, animated: true) 


    } 
+0

Пожалуйста, перейдите по этой ссылке, есть рабочее решение. То, что вы НЕ должны делать, - это то, что сказал Абхишек Шарма, хотя это более простое решение, это может повредить вам в долгосрочной перспективе. http://stackoverflow.com/questions/31514195/segueing-to-another-view-controller-without-displaying-the-first-in-ios-8/31515899#31515899 –

+0

@JiriTrecak Благодарим за помощь :) –

ответ

8

Благодарим за ответы. Я решил проблему, и вот мой код.

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
     // Override point for customization after application launch 

     let username = NSUserDefaults.standardUserDefaults().objectForKey("Username") 
     print(username) 

     let storyBoard: UIStoryboard = UIStoryboard(name:"Main", bundle: NSBundle.mainBundle()) 

     if username?.length > 0 { 
      print("User already logged In") 
      let tabBarController: UITabBarController = storyBoard.instantiateViewControllerWithIdentifier("TabBarController") as! UITabBarController 
      self.window?.makeKeyAndVisible() 
      self.window?.rootViewController = tabBarController 
     } else { 
      print("New User") 
      let loginViewController: ViewController = storyBoard.instantiateViewControllerWithIdentifier("ViewController") as! ViewController 
      self.window?.makeKeyAndVisible() 
      self.window?.rootViewController = loginViewController 
     } 


     return true 
    } 

Это из Вход Кнопка Действие:

let storyboard: UIStoryboard = UIStoryboard(name:"Main", bundle: NSBundle.mainBundle()) 
     let tabBarController: UITabBarController = storyboard.instantiateViewControllerWithIdentifier("TabBarController") as! UITabBarController 

     let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
     appDelegate.window!.rootViewController = tabBarController 

Просто упомянуть "TabBarController" в качестве идентичности в раскадровку для UITabBarController. Я создал Viewcontroller, встроенный в UINavigationController и UITabBarController, с тремя UIViewControllers отдельно.

Я надеюсь, что это поможет кому-то еще. Благодарю.

+0

Очень хорошее решение :) Небольшое улучшение, которое нужно сделать: в следующий раз просто сделайте новый метод, чтобы не засорять делегата приложения :) –

+0

Я уверен. Я сохраню этот набор кода в методе. Спасибо :) –

+0

@ Yuvaraj.M привет, мне нужно добавить что-то особенное в класс appdelegate? – VAAA

0

Пожалуйста, зарегистрируйтесь image Ваша раскадровка должна выглядеть следующим образом. enter image description here

Затем дать Storyboard Segue идентификатор, который переведет вас в UITabbarController от LoginViewController.

Затем paste следующий код, из которого вы хотите перейти.

@IBAction func btnLogin_Click(sender: AnyObject) { 
    self.performSegueWithIdentifier("LoginToTabBar", sender: self) 
    //LoginToTabBar is identifier which you settled out in storyboard segue. 

} 
+0

Спасибо за ваш ответ :) –

Смежные вопросы