2017-01-12 19 views
0

これで、Parseでログインユーザー用のビューコントローラを作成しました。ユーザーがログインボタンでログインすると、タブバーがコントローラの負荷を表示します。問題は、ユーザーがアプリを開いて既にログインしている場合、彼はログインを入力しないで行くことを望んでいないということです。私は署名ビューコントローラがタブバービューコントローラに彼を送信したい。ログインビューからタブバーコントローラを読み込む方法 - Swift

初期ビューコントローラはタブバービューコントローラですが、この問題に対処するためにさまざまな方法を試しましたが、何も問題はありません。

enter image description here

すべてのあなたの思考を待っています。

答えて

0

これを達成する方法は多分多岐にわたりますが、過去にこのような状況を扱った方法の1つは、カスタムコンテナViewControllerを作成することです。このVCには独自のUIViewはありませんが、その代わりに他のViewControllerを「ビュー」として表示します。

ここには、このタイプのコントローラーを作成する方法が記載されているApple documentationへのリンクがあります。

このアーキテクチャの利点の1つは、自分のアカウントステータスに関連するイベント(ログインしていない、オフラインに達した、アカウントが中断している、最初にタイムアウトユーザ、ログアウトなど)。

EDIT:例コンテナコントローラー

はここでカスタム・コンテナ・コントローラを実装する方法の例です。ここに示した機能のいくつかを実行するためのより良い方法があると確信していますが、うまくいけば、これはあなたに良いスタートを与えます。

import UIKit 

class ApplicationContainerController: UIViewController { 
    //MARK: - View Controller Routing Properties 
    private var _currentClientView:UIView? = nil 
    private var _currentViewController: UIViewController? = nil 


    //MARK: - Initialization 
    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 

    //MARK: - UIViewController Members 
    override func viewDidLoad() { 
     super.viewDidLoad() 

    } 

    override var shouldAutomaticallyForwardAppearanceMethods : Bool { 
     return true 
    } 

    override func viewWillAppear(_ animated: Bool) { 

     //Get the user and route to the appropriate VC 
     let yourUserObject: AnyObject? = YourDataSource.TryToGetAUser() 
     DispatchQueue.main.async { 
      self.routeUser(yourUserObject) 
     } 

    } 

    //MARK: - Your Custom Routing Logic 
    func routeUser(_ yourUserObject: AnyObject?) { 

     //make sure we have an existing user, or else we send them to login 
     guard let user = yourUserObject 
      else { 
       self.displayContentController(YourLoginViewController()) 
       return 
     } 

     var destinationViewController:UIViewController 

     //please use an enum or something (instead of strings) in your code 
     switch user.signInStatus { 
      case "loginActive": 
       let mainMenuViewController = YourMainMenuViewController() 
       mainMenuViewController.user = user 
       destinationViewController = mainMenuViewController 
      case "firstLogin": 
       let firstLoginViewController = YourFirstLoginViewController() 
       firstLoginViewController.user = user 
       destinationViewController = firstLoginViewController 
      case "giveUsMoney": 
       let weWantMoneyViewController = YourOtherViewController() 
       weWantMoneyViewController.user = user 
       destinationViewController = weWantMoneyViewController 
      default: 
       //loginFailed or some other status we don't know how to handle 
       destinationViewController = YourLoginViewController() 
     } 


     if let activeViewController = self._currentViewController, 
      type(of: activeViewController) !== type(of: destinationViewController) { 
      //we have an active viewController that is not the destination, cycle 
      self.cycleFromCurrentViewControllerToViewController(destinationViewController) 
     } else { 
      //no active viewControllers 
      self.displayContentController(destinationViewController) 
     } 


    } 



    //MARK: - Custom Content Controller Routing Methods 
    private func frameForContentController() -> CGRect { 
     return self.view.frame 
    } 

    private func newViewStartFrame() -> CGRect { 
     return CGRect(x: self.view.frame.origin.x, 
         y: self.view.frame.origin.y + self.view.frame.size.width, 
         width: self.view.frame.size.width, 
         height: self.view.frame.size.height) 
    } 

    private func oldViewEndFrame() -> CGRect { 
     return CGRect(x: self.view.frame.origin.x, 
         y: self.view.frame.origin.y - self.view.frame.size.width, 
         width: self.view.frame.size.width, 
         height: self.view.frame.size.height) 
    } 


    /** 
    Transitions viewControllers, adds-to/removes-from context, and animates views on/off screen. 
    */ 
    private func cycleFromCurrentViewControllerToViewController(_ newViewController: UIViewController) { 
     if let currentViewController = self._currentViewController { 
      self.cycleFromViewController(currentViewController, toViewController: newViewController) 
     } 
    } 

    private func cycleFromViewController(_ oldViewController:UIViewController, toViewController newViewController:UIViewController) { 

     let endFrame = self.oldViewEndFrame() 

     oldViewController.willMove(toParentViewController: nil) 
     self.addChildViewController(newViewController) 
     newViewController.view.frame = self.newViewStartFrame() 

     self.transition(from: oldViewController, to: newViewController, 
         duration: 0.5, 
         options: [], 
         animations: {() -> Void in 
          newViewController.view.frame = oldViewController.view.frame 
          oldViewController.view.frame = endFrame 
     }) { (finished:Bool) -> Void in 
      self.hideContentController(oldViewController) 
      self.displayContentController(newViewController) 
     } 
    } 


    /** 
     Adds a view controller to the hierarchy and displays its view 
    */ 
    private func displayContentController(_ contentController: UIViewController) { 
     self.addChildViewController(contentController) 
     contentController.view.frame = self.frameForContentController() 
     self._currentClientView = contentController.view 
     self.view.addSubview(self._currentClientView!) 
     self._currentViewController = contentController 
     contentController.didMove(toParentViewController: self) 

    } 

    /** 
    Removes a previously added view controller from the hierarchy 
    */ 
    private func hideContentController(_ contentController: UIViewController) { 
     contentController.willMove(toParentViewController: nil) 
     if (self._currentViewController == contentController) { 
      self._currentViewController = nil 
     } 
     contentController.view.removeFromSuperview() 
     contentController.removeFromParentViewController() 

    } 

} 
+0

私は解決策を理解できるようにサンプルコードをお願いします。 – user2508528

+0

まあまあです。スウィフトを手に入れましょう。 –