2017-06-02 2 views
1

J'ai UIViewController et j'ai ajouté un UITableView dans le storyboard, plus tard j'ai ajouté un reconnaissance de geste vers la vue, mais rien ne s'est passé.Glisser le geste vertical ne fonctionnant pas avec UITableView

ceci est mon code

import UIKit 

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UIGestureRecognizerDelegate { 

@IBOutlet weak var tableview: UITableView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    let swipeRegongnizer = UISwipeGestureRecognizer(target: self, action: #selector(self.handleSwipeUp)) 
    swipeRegongnizer.direction = UISwipeGestureRecognizerDirection.up 
    swipeRegongnizer.delegate = self 
    tableview.addGestureRecognizer(swipeRegongnizer) 
} 

func handleSwipeUp(gesture: UISwipeGestureRecognizer) { 
     print("swiped up") 
} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 100 
} 
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = UITableViewCell() 
    cell.textLabel?.text = "cell\(indexPath.row)" 
    return cell 
} 
} 

Répondre

6

1. Mettre en œuvre UIGestureRecognizerDelegate. 2. définir le délégué.

yourGesture.delegate = self 

3. ajouter la fonction suivante dans votre fichier rapide respectif.

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { 
     return true 
} 
+0

travaillé, mais pourquoi devrais-je mettre en œuvre le numéro 3 –

+1

parce que dans votre vue de table il fonctionne avec scrollview et vous mettez en œuvre glisser donc il ya deux gestes. :) Cependant, si c'est utile, j'espère que vous accepterez ma réponse aussi. :) –

+0

absolument, il suffit d'éditer votre réponse et de rendre le code du numéro 3 plus approprié! –

2

Mettre en œuvre la méthode des délégués

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { 
    return true 
} 

Cette méthode permettra à la fois le geste pan de la vue de la table et votre geste de balayage à reconnaître simultanément

0

Vous devez ajouter le délégué à la suite dans votre contrôleur de vue respectif.

Objective-C

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ 
    return YES; 
} 

Swift

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { 
     return true 
    } 

Explication

Cette méthode est appelée lors de la reconnaissance d'un geste ou l'autre gestureRecognizer ou otherGestureRecognizer bloquerait la autre reconnaissance de gestes de reconnaître son geste. Notez que le retour de YES est garanti pour permettre une reconnaissance simultanée; le retour de NO, d'autre part, n'est pas garanti pour empêcher la reconnaissance simultanée parce que le délégué de l'autre reconnaissance de geste peut return YES. Par défaut, il renvoie false.