首页 > 解决方案 > 如何更改幻灯片菜单的视图控制器?

问题描述

我有 2 个单独的 VC-s,每个都需要根据应用程序的状态向用户显示。这就是我在 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。

如何使这项工作?

标签: iosswift

解决方案


你可以试试这个技巧。我在您图书馆的示例项目中对其进行了测试。这可行,但您需要清理代码并使展开的选项和铸件更安全。

基本上,诀窍是将您的leftControlleror嵌入rightControllerUINavigationController. 并使用您尝试访问slideMenuController. AppDelegate然后替换viewControllers那个navigationController。

在(我说的是示例项目,你应该熟悉这个或者在这里关联你的mainController)viewDidLoad()MainViewController我有这段代码将在 5 秒内执行;)我在测试某些东西时使用这种方法,只是为了节省演示时间。

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]
        }
    }

在 appDelegate 中,我将控制器嵌入到 navigationController 中:

let slideMenuController = SlideMenuController(mainViewController:nvc, leftMenuViewController: UINavigationController(rootViewController: leftViewController), rightMenuViewController: rightViewController)

这应该可以帮助你。


推荐阅读