如何更改幻灯片菜单的视图控制器?

时间:2019-02-06 17:33:14

标签: ios swift

我有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。

如何进行这项工作?

1 个答案:

答案 0 :(得分:0)

您可以尝试此技巧。我在您的图书馆的示例项目中对其进行了测试。这可以工作,但是您需要清理代码,并使展开的可选内容和转换更安全。

基本上,诀窍是将leftControllerrightController嵌入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]
        }
    }

这应该可以帮助您。