revealViewController()总是返回nil

时间:2016-01-25 07:23:22

标签: ios swift

我在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(也许当我从第一个导航控制器跳到第二个导航控制器时)但我不知道该怎么做。

3 个答案:

答案 0 :(得分:4)

revealViewControllernil成为最合适的原因segues 您是否未在stroyboard中正确连接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)

请参阅此tutorial,这很容易理解。

<强>更新 如果在您的情况下您只需要打开登录vc,如果用户没有登录,您可以这样做:

AppDelegate中的

SWRevealViewController

其中LoginViewController是SWRevealViewController的stroyboard id,Manifest是登录视图控制器(或其导航控制器,如果存在)的故事板ID。

enter image description here

答案 1 :(得分:3)

如果有人想知道如何进行手动操作,最终这对我有用。

    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)

答案 2 :(得分:0)

如果您正在根据当前用户信息跳过登录场景,请确保使用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
    }