You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift 4中登录后如何为MainViewController设置侧边菜单

嘿,我仔细看了你的AppDelegate代码,你其实已经把侧边菜单的初始化逻辑写在createMenuView()里了,逻辑本身是通顺的,但可能是在登录成功后的页面切换环节没处理到位,导致菜单没正常显示。我来帮你拆解问题,一步步优化:

一、先补全登录成功后的关键操作

你当前的代码只在App启动时判断userId是否存在来决定显示登录页还是菜单,但如果是首次登录成功(不是启动时自动登录),你需要做两件事:

  1. 把用户ID存入UserDefaults
  2. 主动调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:25:37