ENSideMenuNavController - 禁止与所有其他视图的交互

时间:2017-09-10 21:12:56

标签: ios swift uinavigationcontroller

我有一个导航视图,当它通过点击汉堡菜单弹出然后打开到半页。它仍然在后台有其他视图(根视图控制器及其子视图)。

当用户点击其他视图所在的灰色背景区域时,他们可以与这些视图进行交互,页面导航将导航视图保留在顶部。

Nav View在多个地方使用,所以我需要用于禁止与其他视图交互的代码在Nav View Controller中。代码如下。

import UIKit

class MenuNavViewController: ENSideMenuNavigationController, ENSideMenuDelegate {

    var tabBar: ManagerTabViewController!

    override func viewDidLoad() {
        super.viewDidLoad()

        let sb = UIStoryboard(name: "iPhoneStoryboard", bundle: nil)
        let menu = sb.instantiateViewController(withIdentifier: "MenuTableViewController") as! MenuTableViewController
        menu.tabBar = self.tabBar
        sideMenu = ENSideMenu(sourceView: self.view, menuViewController: menu, menuPosition: .left)
        sideMenu?.bouncingEnabled = false

        view.bringSubview(toFront: navigationBar)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    // MARK: - ENSideMenu Delegate
    func sideMenuWillOpen() {
    }

    func sideMenuWillClose() {
    }

    func sideMenuDidClose() {

    }

    func sideMenuDidOpen() {

    }
}

如何在上面的NavViewController中禁用/启用与其他视图(或至少从其启动的视图)的交互?

1 个答案:

答案 0 :(得分:0)

我找到了以下代码中显示的答案。

进一步了解ENSideMenuNavigationController类,我发现" init"方法在" viewControllers"上设置相关的视图控制器。并实施了下面的代码,产生了预期的效果。

import UIKit

class MenuNavViewController: ENSideMenuNavigationController, ENSideMenuDelegate {

    var tabBar: ManagerTabViewController!

    override func viewDidLoad() {
        super.viewDidLoad()

        let sb = UIStoryboard(name: "iPhoneStoryboard", bundle: nil)
        let menu = sb.instantiateViewController(withIdentifier: "MenuTableViewController") as! MenuTableViewController
        menu.tabBar = self.tabBar
        sideMenu = ENSideMenu(sourceView: self.view, menuViewController: menu, menuPosition: .left)
        sideMenu?.bouncingEnabled = false
        sideMenu?.delegate = self


        view.bringSubview(toFront: navigationBar)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    // MARK: - ENSideMenu Delegate
    func sideMenuWillOpen() {

    }

    func sideMenuWillClose() {
    }

    func sideMenuDidClose() {
        // Enable interaction with other views again
        for viewController in self.viewControllers {
            viewController.view.isUserInteractionEnabled = true
        }
    }

    func sideMenuDidOpen() {
        // Disable interaction with other views
        for viewController in self.viewControllers {
            viewController.view.isUserInteractionEnabled = false
        }
    }
}

对于更好的练习/代码的任何其他建议仍然会受到赞赏。