2017-07-25 1 views
0

Je gère un UITapGesture sur UITableView et affiche un UIMenuController sur le UITableViewCell sélectionné. Quand je sélectionne et que le menu apparaît, si je bouge le doigt au-dessus de la cellule, il semble que le menu apparaisse constamment et je n'aime pas la façon dont ça se passe.UIMenuController et TapGesture réapparaissent sur le mouvement

Il y a un moyen d'éviter cela?

Merci!

Tap code geste (Swift 2.3):

let longPressGesture:UILongPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPress)) 
longPressGesture.minimumPressDuration = 0.5 
longPressGesture.delegate = self 
self.messagesTableView.addGestureRecognizer(longPressGesture) 

enter image description here

Répondre

0

Eh bien, enfin je l'ai résolu comme ceci:

Swift 2

Déclarant cette variable globale

var menuControllerOpened:Bool = false 

Faire un bloc sur tagGestureHandler:

func handleLongPress(longPressGesture:UILongPressGestureRecognizer) { 

    if !self.menuControllerOpened { 
     let p = longPressGesture.locationInView(self.messagesTableView) 
     self.selectedIndexPathMenu = self.messagesTableView.indexPathForRowAtPoint(p) 
     if self.selectedIndexPathMenu != nil { 
      //Do something you want 
      let menu = UIMenuController.sharedMenuController() 
      let reportItem = UIMenuItem(title: "Reportar usuario", action: #selector(reportMessageItem)) 
      menu.menuItems = [reportItem] 
      menu.setTargetRect(cell.frame, inView: self.messagesTableView) 
      menu.setMenuVisible(true, animated: true) 
     } 
    } 

} 

Mais la configuration des événements de notification, qui se chargera lorsqu'un MenuController est spectacle ou cacher:

func configureMenuControllerEvents() { 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(handleMenuControllerShow), name: UIMenuControllerWillShowMenuNotification, object: nil) 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(handleMenuControllerHide), name: UIMenuControllerWillHideMenuNotification, object: nil) 

} 

func handleMenuControllerShow() { 
    self.menuControllerOpened = true 
} 

func handleMenuControllerHide() { 
    self.menuControllerOpened = false 
}