如何在 RearViewController 的视图处于活动状态时禁用 front ViewController 的视图 Swift 3.0 中的 SWRevealViewController
How to disable front ViewController's view when RearViewController's view is active SWRevealViewController in Swift 3.0
如何禁用用户与前视图控制器的交互 - 即在我的例子中,当显示后菜单时使用 class ViewController。使用当前代码,当显示后菜单时,bookCleaningButton
不会被禁用。
import UIKit
class ViewController: UIViewController, SWRevealViewControllerDelegate {
@IBOutlet weak var menuButton: UIBarButtonItem!
@IBOutlet weak var bookCleaningButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
self.revealViewController().rearViewRevealWidth = self.view.frame.width - 80
//revela the menu if it is not nil
if self.revealViewController() != nil {
self.revealViewController().delegate = self
menuButton.target = self.revealViewController()
menuButton.action = #selector(SWRevealViewController.revealToggle(_:))
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer()
}
}
func revealController(revealController: SWRevealViewController!, willMoveToPosition position: FrontViewPosition) {
if revealController.frontViewPosition == FrontViewPosition.left {
self.view.isUserInteractionEnabled = false
}
else {
self.view.isUserInteractionEnabled = true
}
}
}
您应该在菜单视图控制器中处理它。显示视图控制器可以访问 frontViewController
,并且 属性 可用于将 userInteractionEnabled
设置为 false
。
因此,在您的菜单视图控制器中,在 viewWillAppear
方法中编写此代码:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.revealViewController().view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
self.revealViewController().frontViewController.revealViewController().tapGestureRecognizer()
self.revealViewController().frontViewController.view.isUserInteractionEnabled = false
}
并且在同一个 Menu view Controller 的 viewWillDisappear
方法中添加以下代码:
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.revealViewController().frontViewController.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
self.revealViewController().frontViewController.view.isUserInteractionEnabled = true
}
以上代码还添加了其他手势,但这些可以是可选的。主要动作发生在这两行:
self.revealViewController().frontViewController.view.isUserInteractionEnabled = false
self.revealViewController().frontViewController.view.isUserInteractionEnabled = true
希望这能解决您的问题。干杯。
在您的前视图控制器中 class。在 viewdidload() 方法上编写此代码。
override func viewDidLoad() {
super.viewDidLoad()
menuBtn.addTarget(self.revealViewController(), action: #selector(SWRevealViewController.revealToggle(_:)), for: .touchUpInside)
revealViewController().delegate = self
// Once time - See documented SWRevealViewController.h
revealViewController().tapGestureRecognizer()
revealViewController().panGestureRecognizer()
}
然后在前视图控制器中使用来自 SWRevealviewcontroller 的委托
func revealController(_ revealController: SWRevealViewController!, willMoveTo position: FrontViewPosition) {
if position == FrontViewPosition.right {
revealController.frontViewController.view.isUserInteractionEnabled = false
}
else {
revealController.frontViewController.view.isUserInteractionEnabled = true
}
}
这将达到您的期望....
如何禁用用户与前视图控制器的交互 - 即在我的例子中,当显示后菜单时使用 class ViewController。使用当前代码,当显示后菜单时,bookCleaningButton
不会被禁用。
import UIKit
class ViewController: UIViewController, SWRevealViewControllerDelegate {
@IBOutlet weak var menuButton: UIBarButtonItem!
@IBOutlet weak var bookCleaningButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
self.revealViewController().rearViewRevealWidth = self.view.frame.width - 80
//revela the menu if it is not nil
if self.revealViewController() != nil {
self.revealViewController().delegate = self
menuButton.target = self.revealViewController()
menuButton.action = #selector(SWRevealViewController.revealToggle(_:))
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer()
}
}
func revealController(revealController: SWRevealViewController!, willMoveToPosition position: FrontViewPosition) {
if revealController.frontViewPosition == FrontViewPosition.left {
self.view.isUserInteractionEnabled = false
}
else {
self.view.isUserInteractionEnabled = true
}
}
}
您应该在菜单视图控制器中处理它。显示视图控制器可以访问 frontViewController
,并且 属性 可用于将 userInteractionEnabled
设置为 false
。
因此,在您的菜单视图控制器中,在 viewWillAppear
方法中编写此代码:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.revealViewController().view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
self.revealViewController().frontViewController.revealViewController().tapGestureRecognizer()
self.revealViewController().frontViewController.view.isUserInteractionEnabled = false
}
并且在同一个 Menu view Controller 的 viewWillDisappear
方法中添加以下代码:
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.revealViewController().frontViewController.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
self.revealViewController().frontViewController.view.isUserInteractionEnabled = true
}
以上代码还添加了其他手势,但这些可以是可选的。主要动作发生在这两行:
self.revealViewController().frontViewController.view.isUserInteractionEnabled = false
self.revealViewController().frontViewController.view.isUserInteractionEnabled = true
希望这能解决您的问题。干杯。
在您的前视图控制器中 class。在 viewdidload() 方法上编写此代码。
override func viewDidLoad() {
super.viewDidLoad()
menuBtn.addTarget(self.revealViewController(), action: #selector(SWRevealViewController.revealToggle(_:)), for: .touchUpInside)
revealViewController().delegate = self
// Once time - See documented SWRevealViewController.h
revealViewController().tapGestureRecognizer()
revealViewController().panGestureRecognizer()
}
然后在前视图控制器中使用来自 SWRevealviewcontroller 的委托
func revealController(_ revealController: SWRevealViewController!, willMoveTo position: FrontViewPosition) {
if position == FrontViewPosition.right {
revealController.frontViewController.view.isUserInteractionEnabled = false
}
else {
revealController.frontViewController.view.isUserInteractionEnabled = true
}
}
这将达到您的期望....