我有一个导航视图,当它通过点击汉堡菜单弹出然后打开到半页。它仍然在后台有其他视图(根视图控制器及其子视图)。
当用户点击其他视图所在的灰色背景区域时,他们可以与这些视图进行交互,页面导航将导航视图保留在顶部。
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中禁用/启用与其他视图(或至少从其启动的视图)的交互?
答案 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
}
}
}
对于更好的练习/代码的任何其他建议仍然会受到赞赏。