使用kukushi/SideMenu库,模态呈现页面后revealMenu()函数失效
我之前也碰到过类似的坑,其实核心原因很简单:当你用present方式弹出新的导航控制器时,这个导航控制器是独立于原来的SideMenuController层级之外的,所以ScheduleTableVC里的sideMenuController属性会是nil,自然调用revealMenu()没反应。下面给你几个可行的解决方案:
方案一:改用push方式(推荐,保持原有SideMenu层级)
如果你的业务场景允许,直接把ScheduleTableVCpush到当前导航栈里,这样它依然处于SideMenuController的管辖范围内,就能正常访问sideMenuController:
// 直接实例化目标VC,不需要单独套导航控制器(如果当前已有导航栈的话) let vc = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ScheduleTableVC") as! ScheduleTableVC vc.text = "" self.navigationController?.pushViewController(vc, animated: true)
方案二:必须模态呈现时,把导航控制器嵌入SideMenuController
如果业务逻辑要求必须用模态弹出,那你需要把目标导航控制器作为SideMenuController的内容控制器,再模态呈现这个SideMenuController:
// 1. 实例化目标VC和对应的导航控制器 let scheduleVC = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ScheduleTableVC") as! ScheduleTableVC scheduleVC.text = "" let navController = UINavigationController(rootViewController: scheduleVC) // 2. 创建SideMenuController并配置菜单和内容 let sideMenuVC = SideMenuController() // 这里替换成你自己的菜单视图控制器实例 sideMenuVC.menuViewController = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "YourMenuVC") sideMenuVC.contentViewController = navController // 3. 模态呈现SideMenuController self.present(sideMenuVC, animated: true, completion: nil)
这样模态出来的视图控制器层级里包含了SideMenuController,ScheduleTableVC就能正确拿到sideMenuController实例,调用revealMenu()就正常了。
额外检查项
最后再确认两个点:
- 确保
ScheduleTableVC文件顶部已经导入了SideMenu库:import SideMenu - 检查全局配置是否正确(比如在
SceneDelegate或AppDelegate里):
// 示例配置,根据你的实际菜单VC调整 SideMenuManager.default.leftMenuNavigationController = storyboard?.instantiateViewController(withIdentifier: "LeftMenuNav") as? UISideMenuNavigationController // 可选:添加侧滑手势 SideMenuManager.default.addPanGestureToPresent(toView: self.window!)
内容的提问来源于stack exchange,提问作者Adakhan Azizbek
相关产品推荐
相关产品推荐

