Я использую этот library для представления меню боковой панели. Мне нужно отключить меню, просто нажав в любом месте за пределами меню.Обращение с краном в представленииViewController для закрытия бокового меню
То, что я пробовал:
1) Ручка крана событий на ViewController (Ответственного представления меню)
Результат: В диам события произвели только тогда, когда меню закроется, и как только меню открыто не больше отводов событий
2) Ручка крана события на MenuController
Результат: получить ОНЛ у ди событие меню это сам
3) Добавить водопроводный распознаватель в ViewController когда меню представлено с помощью presentingViewController
Результата: не получило события
здесь код в MenuViewController
:
private var tapGesture: UITapGestureRecognizer? = nil
override func viewDidLoad() {
super.viewDidLoad()
if let viewController = self.presentingViewController as? ViewController {
tapGesture = UITapGestureRecognizer(target: self, action: "handleTap:")
viewController.container.addGestureRecognizer(tapGesture!)
}
}
func handleTap(recognizer: UITapGestureRecognizer){
let location = recognizer.locationInView(view)
print("menu \(location)")
}
Я действительно стоп. Невозможно выяснить, как получать события касания вне меню после его представления.
Примечание: Я использую swift_2.0 Branch
Edit:
Я был в состоянии получить кран событие за пределами меню, прикрепленного водопроводного распознавателем к ключевому окну:
tapGesture = UITapGestureRecognizer(target: self, action: "handleTap:")
UIApplication.sharedApplication().keyWindow?.addGestureRecognizer(tapGesture!)
Но теперь меню, которое является UITableViewController
, не может реагировать на события крана willSelectRowAtIndexPath
и didSelectRowAtIndexPath
Edit2:
Я был в состоянии решить вопрос о блоке сенсорных событий на TableView с внедрением методы делегата от UIGestureRecognizerDelegate
:
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
let location = touch.locationInView(view)
if !CGRectContainsPoint(self.tableView.frame, location){
delegate?.menuDidCancel(self)
}
return false
}
Проблема решена, но это лучшее решение любого другого элегантного один?