2015-10-05 2 views
2

Contexte

Je suis en train de faire un UICollectionViewCell comme un comporter bouton (c.-à-faire une faible animation sur le toucher). J'ai eu l'idée de juste remplir la cellule avec un UIButton. Le bouton prend alors soin de l'effet visuel d'être engagé. Mais alors je devrais passer l'événement tactile sur le parent (le UICollectionViewCell) de sorte que le bouton ne consomme pas seulement l'événement. De cette façon, je pourrais le gérer avec la vue de la collection didSelectItemAtPath. Le problème ci-dessous est ma tentative de comprendre comment passer l'événement.Comment envoyer les événements tactiles à nextResponder à Swift

Mon problème

je suis tombé sur this Objective-C answer pour passer l'événement tactile sur:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesBegan:touches withEvent:event]; 
    [self.nextResponder touchesBegan:touches withEvent:event]; 
} 

Cependant, je me suis coincé quand j'ai essayé de convertir en Swift:

class MyButton: UIButton { 

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     super.touchesBegan(touches, withEvent: event) 
     self.nextResponder() // ??? 
    } 
} 

Le La méthode ne prend aucun argument, alors comment transmettre les événements tactiles?

Je n'ai pas pu utiliser les questions SO connexes (here et here) pour m'aider à comprendre cela.

Répondre

2

La méthode nextResponder renvoie une option UIResponder?, de sorte que vous pouvez simplement appeler touchesBegan sur l'objet retourné:

self.nextResponder()?.touchesBegan(touches, withEvent: event) 
+1

Cela résout la question que je posais. Malheureusement, mon 'UICollectionViewCell' ne semble toujours pas recevoir les événements tactiles. À moins que vous sachiez ce que le problème peut être à portée de main, cependant, cela appelle probablement une nouvelle question. – Suragch