Swift 4中登录后如何为MainViewController设置侧边菜单
嘿,我仔细看了你的AppDelegate代码,你其实已经把侧边菜单的初始化逻辑写在createMenuView()里了,逻辑本身是通顺的,但可能是在登录成功后的页面切换环节没处理到位,导致菜单没正常显示。我来帮你拆解问题,一步步优化:
一、先补全登录成功后的关键操作
你当前的代码只在App启动时判断userId是否存在来决定显示登录页还是菜单,但如果是首次登录成功(不是启动时自动登录),你需要做两件事:
- 把用户ID存入
UserDefaults - 主动调用
createMenuView()切换根控制器
在你的GSLoginViewController登录成功的回调里,添加这段代码:
// 1. 保存用户ID到本地 UserDefaults.standard.set("登录获取到的真实用户ID", forKey: "userId") // 2. 获取AppDelegate实例并切换到菜单页面 guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return } appDelegate.createMenuView()
二、优化createMenuView()的细节
你的方法逻辑没问题,可以稍微调整下代码结构,让它更清晰:
fileprivate func createMenuView() { let mainStoryboard = UIStoryboard(name: "Main", bundle: nil) // 初始化主页面导航控制器 let mainVC = mainStoryboard.instantiateViewController(withIdentifier: "GSMngrMainViewController") as! GSMngrMainViewController let mainNav = UINavigationController(rootViewController: mainVC) UINavigationBar.appearance().tintColor = .black // 初始化左侧菜单控制器 let leftMenuVC = mainStoryboard.instantiateViewController(withIdentifier: "LeftViewController") as! LeftViewController leftMenuVC.mainViewController = mainNav // 初始化侧边菜单容器 let slideMenuContainer = GSExSlideMenuController(mainViewController: mainNav, leftMenuViewController: leftMenuVC) slideMenuContainer.automaticallyAdjustsScrollViewInsets = true slideMenuContainer.delegate = mainVC // 设置根控制器并显示 window?.backgroundColor = .white window?.rootViewController = slideMenuContainer window?.makeKeyAndVisible() }
三、给主页面添加菜单触发按钮
菜单初始化后,你还需要在GSMngrMainViewController里加一个触发菜单的按钮(比如导航栏左侧的汉堡按钮):
override func viewDidLoad() { super.viewDidLoad() // 创建汉堡按钮 let menuBtn = UIBarButtonItem(image: UIImage(named: "menu_icon"), // 替换成你的菜单图标 style: .plain, target: self, action: #selector(toggleLeftMenu)) navigationItem.leftBarButtonItem = menuBtn } @objc private func toggleLeftMenu() { // 找到侧边菜单容器并触发打开/关闭 if let slideMenuVC = navigationController?.parent as? GSExSlideMenuController { slideMenuVC.openLeftMenu() // 或者根据库的API调用对应的方法,比如toggleLeftMenu() } }
四、额外检查点
- 确认
GSExSlideMenuController的配置正确:不管是自定义的容器控制器还是第三方库,要确保它能正确处理主页面和菜单页面的切换逻辑 - 确认Storyboard里的控制器ID(
GSMngrMainViewController、LeftViewController)和代码里的完全一致,避免实例化失败 - 测试自动登录场景:重启App时,
userId存在的话应该直接进入菜单页面
这样调整后,登录成功后就能正常显示侧边菜单,并且可以通过按钮触发菜单的展开/收起啦~
内容的提问来源于stack exchange,提问作者Appu Y
相关产品推荐
相关产品推荐

