【问题标题】:How to disable front ViewController's view when RearViewController's view is active SWRevealViewController in Swift 3.0如何在 Swift 3.0 中的后视图控制器视图处于活动状态时禁用前视图控制器视图
【发布时间】:2017-08-25 01:11:11
【问题描述】:

当显示后菜单时,如何禁用用户与前视图控制器的交互 - 即在我的例子中使用类 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
     }
  }  
}

【问题讨论】:

    标签: swift3 swrevealviewcontroller


    【解决方案1】:

    在您的前视图控制器类中。在 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()
    }
    

    然后在 frontviewcontroller 中使用 SWRevealviewcontroller 中的此委托

    func revealController(_ revealController: SWRevealViewController!, willMoveTo position: FrontViewPosition) {
            if position == FrontViewPosition.right {
                revealController.frontViewController.view.isUserInteractionEnabled = false
            }
            else {
                revealController.frontViewController.view.isUserInteractionEnabled = true
            }
        }
    

    这将达到您的期望....

    【讨论】:

      【解决方案2】:

      您应该在菜单视图控制器中处理这个问题。显示视图控制器可以访问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
      

      希望这能解决您的问题。干杯。

      【讨论】:

        猜你喜欢
        • 2013-03-30
        • 1970-01-01
        • 1970-01-01
        • 2017-07-09
        • 1970-01-01
        • 2019-05-30
        • 1970-01-01
        • 2014-06-11
        • 2019-10-04
        相关资源
        最近更新 更多