簡體   English   中英

如何更改幻燈片菜單的視圖控制器?

[英]How to change a viewcontroller of a slidemenu?

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

如何使這項工作?

您可以嘗試此技巧。 我在您的圖書館的示例項目中對其進行了測試。 這可以工作,但是由您自己來清理代碼,並使展開的可選內容和轉換更安全。

基本上,訣竅是將您的leftControllerrightController嵌入到UINavigationController 並使用您嘗試訪問AppDelegateslideMenuController的方式訪問此類navigationController。 然后替換該viewControllers

MainViewControllerviewDidLoad()中(我在談論示例項目,您應該對此很熟悉,或者在這里關聯mainController)。 我有這段代碼塊,將在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)

這應該可以幫助您。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM