revealViewController()总是返回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
(也许当我从第一个导航控制器跳到第二个)但我不知道该怎么做。
最方便成为revealViewController
nil
的原因是你没有在stroyboard
正确连接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 }