簡體   English   中英

revealViewController()總是返回nil

[英]revealViewController() always returns nil

我在Xcode 7.2和iOS 9.2中使用revealViewController遇到了一些麻煩。

我的應用程序以嵌入導航控制器中的視圖控制器開始執行登錄。 登錄后,或者如果存在登錄令牌,我會使用以下代碼跳轉到導航控制器中嵌入的另一個視圖控制器:

let homePage = self.storyboard?.instantiateViewControllerWithIdentifier("HomeViewController") as! HomeViewController
let homePageNav = UINavigationController(rootViewController: homePage)
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
appDelegate.window?.rootViewController = homePageNav

在這個家庭視圖控制器中,我想有一個帶SWRealViewController的左側導航菜單。

我有SWRealViewController視圖與sw_front鏈接到我的家庭導航控制器,以及以下代碼:

if (self.revealViewController() != nil) {
    self.menuButton.target = self.revealViewController()
    self.menuButton.action = "revealToggle:"
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())

但是self.revealViewController()總是返回nil,所以它不起作用。

我想我在某處丟失了revealViewController (也許當我從第一個導航控制器跳到第二個時),但我不知道該怎么做。

最方便的是為一個理由revealViewControllernil是你沒有連接segues在正確stroyboard

看到本教程,它很容易理解。

更新如果在您的情況下您只需要打開登錄vc,如果用戶沒有登錄,您可能會這樣做:

在AppDelegate中

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

   var rootVCStoryboardId = userIsLoggedin ? "SWRevealViewController" : "LoginViewController"
   self.window?.rootViewController = UIStoryboard(name: Storyboards.main, bundle: NSBundle.mainBundle()).instantiateViewControllerWithIdentifier(rootVCStoryboardId)

其中SWRevealViewController是SWRevealViewController的stroyboard id, LoginViewController是登錄視圖控制器(或其導航控制器,如果存在)的故事板ID。

在此輸入圖像描述

如果有人想知道如何進行手動操作,最終這對我有用。

    let storyboard = UIStoryboard(name: "Main", bundle: nil)

    let sw = storyboard.instantiateViewControllerWithIdentifier("SWRevealViewController") as! SWRevealViewController

    self.view.window?.rootViewController = sw

    let destinationController = self.storyboard?.instantiateViewControllerWithIdentifier("StoryboardID") as! NameOfViewController

    let navigationController = UINavigationController(rootViewController: destinationController)

    sw.pushFrontViewController(navigationController, animated: true)

如果您正在根據當前用戶信息跳過登錄場景,請確保使用SWRevealViewController實例化故事板。 見下面的代碼供參考:

if User.currentUser != nil {
        //There is a current user
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let vc = storyboard.instantiateViewControllerWithIdentifier("SWRevealViewController")
        window?.rootViewController = vc
    }
    else{
        //No current user
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM