2017-05-18 4 views
0

Was Ich habeUILabel in CollectionViewCell nicht blockiert Touch-Ereignisse

  • A ein UICollectionView
  • B ist ein UICollectionViewCell
  • C ist ein UILabel subview von B

    +------------------------------+ 
    |A        | 
    |        | 
    | +----------+ +----------+ | 
    | |C   | |B   | | 
    | |----------| |   | | 
    | |   | |   | | 
    | |B   | |   | | 
    | +----------+ +----------+ | 
    +------------------------------+ 
    

Wenn Sie auf B tippen, wird C als Unteransicht zum oberen Rand der Zelle hinzugefügt. Wenn Sie erneut auf B tippen, wird C aus der Übersicht entfernt (B).

Ausgabe

Touch-Ereignisse "fallen durch" C nach B

Ich kann nicht scheinen zu finden, wie diese Berührungsereignisse zu ignorieren/blockieren; h. das Klopfen auf UILabel C sollte sich nicht in der Responder-Kette fortpflanzen.

Zum Beispiel, wenn C ein UIButton, ein UICollectionView usw. wäre, würde es Touch-Ereignisse automatisch "abfangen". Wie das? Sie alle erben von UIResponder als UIView s ...

Antwort

3

Standardmäßig hat UILabel keine Benutzerinteraktion - so dass es nicht "abfangen" berührt.

Wenn Sie .isUserInteractionEnabled = true auf Ihrem C Etikett gesetzt, es sollte „fressen“ die Berührungen.

Edit: Nach schnellen Test mit einer aktuellen Kollektion Sichtzelle ... Sie brauchen auch einen Gestenerkenner auf das Etikett hinzufügen, um die Noten zu „essen“. Subclassing das Etikett funktionierte für mich in meinem (neuen, verbesserten) Schnelltest:

class EatTouchesLabel: UILabel { 

    var myGest: UIGestureRecognizer! 

    required init(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder)! 
     self.commonInit() 
    } 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
     self.commonInit() 
    } 

    func commonInit() { 
     self.isUserInteractionEnabled = true 
     if myGest == nil { 
      myGest = UITapGestureRecognizer() 
      self.addGestureRecognizer(myGest) 
     } 
    } 

} 
+0

erste Sache, die ich versuchte, aber es funktioniert nicht, die mich verrückt macht. Mein 'UILabel' ist programmgesteuert mit automatischem Layout eingestellt, ändert sich das? – Herakleis

+0

Sind Sie sicher, dass Ihr 'UILabel' in der Ansichtshierarchie tatsächlich über * B * steht? Können Sie Hintergrundfarben einstellen und eine Bildschirmobergrenze angeben, wie sie aussieht? Ich mache einen schnellen Test der Überlagerung einer Beschriftung auf einer Schaltfläche, und wenn die '. isUserInteractionEnabled "ist auf false gesetzt, die Schaltfläche erhält den Touch ... wenn true, nein. Damit....? – DonMag

+0

Ugh ... meine schlechte ... sehe meine Bearbeitung ... – DonMag

Verwandte Themen