Как отключить взаимодействие пользователя с контроллером вид спереди - а именно с классом 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
     }
  }  
}

enter image description here

2
bibscy 31 Мар 2017 в 01:10

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
}

И в том же самом представлении меню 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

Надеюсь, это решит вашу проблему. Приветствия .

4
Gurtej Singh 31 Мар 2017 в 04:45

В вашем классе контроллера вид спереди. Напишите этот код в методе 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 в frontviewcontroller

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

Это будет соответствовать вашим ожиданиям ....

0
Deepakraj Murugesan 23 Ноя 2017 в 06:05