2015-11-02 1 views
0

Я использую этот 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 
} 

Проблема решена, но это лучшее решение любого другого элегантного один?

ответ

0

Я был в состоянии решить вопрос о блоке сенсорных событий на 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 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^