我有2个独立的VC,每个VC都需要根据应用程序的状态显示给用户。这是我在AppDelegate中创建原始幻灯片菜单的方式,它可以按预期工作:
let mainVC = MainNavVC.create()!
let leftMenuVC = LeftMenuVC.create()!
slideMenuController = SlideMenuController(mainViewController: mainVC, leftMenuViewController: leftMenuVC)
self.window?.rootViewController = slideMenuController
self.window?.makeKeyAndVisible()
但是当我尝试更改leftMenuVC时,屏幕变黑,菜单按钮停止工作,而tapGesture仍然显示错误的菜单。这是我用来更改幻灯片菜单的代码:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.slideMenuController?.leftViewController = AnotherLeftMenuVC.create()!
appDelegate.window?.rootViewController = appDelegate.slideMenuController
我还尝试了另一种方法来更改leftMenuVC:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.slideMenuController = SlideMenuController(mainViewController: MainNavVC.sharedInst!,
leftMenuViewController: AnotherLeftMenuVC.create()!)
appDelegate.window?.rootViewController = appDelegate.slideMenuController
appDelegate.window?.makeKeyAndVisible()
这会使我的屏幕变黑,但是tapGesture至少会显示正确的leftMenu。
如何进行这项工作?
答案 0 :(得分:0)
您可以尝试此技巧。我在您的图书馆的示例项目中对其进行了测试。这可以工作,但是您需要清理代码,并使展开的可选内容和转换更安全。
基本上,诀窍是将leftController
或rightController
嵌入UINavigationController
中。并使用您尝试访问slideMenuController
中的AppDelegate
的方式访问此类navigationController。然后替换该navigationController的viewControllers
。
在viewDidLoad()
的{{1}}中(我在谈论示例项目,您应该对此很熟悉,或者在这里关联mainController)。我有这段代码块,将在5秒钟内执行;)我在测试某些东西时使用了这种方法,只是为了节省时间以进行演示。
MainViewController
,然后在appDelegate中,将控制器嵌入到navigationController中:
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.registerCellNib(DataTableViewCell.self)
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(5)) {
let appDel = UIApplication.shared.delegate as! AppDelegate
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let rightViewController = storyboard.instantiateViewController(withIdentifier: "RightViewController") as! RightViewController
((appDel.window?.rootViewController as! ExSlideMenuController).leftViewController as! UINavigationController).viewControllers = [rightViewController]
}
}
这应该可以帮助您。