如何在app中呈现appdelegate中的不同视图控制器

时间:2016-12-06 08:17:19

标签: ios swift uinavigationcontroller

其实我有导航控制器作为根控制器它嵌入在main.storyboard中,我有两个屏幕一个屏幕登录和另一个家庭按照登录凭据我需要跳过登录屏幕,我需要显示主屏幕。从appdelegate我正在做这个跳过它不能正常工作

Unbalanced calls to begin/end appearance transitions for <UINavigationController: 0x7fadf384c600>.

 let storyboard=UIStoryboard.init(name: "Main", bundle: nil)
        let navigationController=storyboard.instantiateInitialViewController()
        let username=UserDefaultUtil.getString(key: AppConstants.PREF_USERID)
        print(username!)
        if username != ""
        {
            window?.rootViewController=navigationController
            let sectionController=SectionController(nibName: "SectionController" , bundle: nil)
            navigationController?.present(sectionController, animated: true, completion: nil)
        }

2 个答案:

答案 0 :(得分:3)

我猜你试图在navigationController中展示你的sectionController,它不是真的如何工作,试试这段代码:

let navigationController = self.storyboard?.instantiateInitialViewController() as! UINavigationController

并用以下内容替换现在:

navigationController.setViewControllers([sectionController], animated: false)

或者只是删除navigationController实例化并使用代码创建它并将其设置为window?.rootViewController

let sectionController=SectionController(nibName: "SectionController" , bundle: nil)
let nav = UINavigationController(rootViewController: sectionController)
window?.rootViewController = nav

答案 1 :(得分:0)

首先,检查登录页面中的用户凭据。然后使用:

if hasCredentials {
let vc:AnyObject! = self.storyboard?.instantiateViewController(withIdentifier: "someViewController")
self.show(vc as! UIViewController, sender: vc)
}

旁注:就个人而言,我是从登录页面执行此操作,因为它简化了流程,我不喜欢在我的AppDelegate中加权。如果您认为您不希望人们看到您的登录屏幕已经是会员,您可以从AppDelegate进行,但考虑到这是您决定采用的路线,在加载过程中可能会减少用户体验。