2014-09-25 15 views
25

Nach der Initialisierung der von der Unterklasse von UIImageView klopfen ich die folgende Codezeile haben:GestureRecognizer reagiert nicht

self.userInteractionEnabled = true 
self.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "handleTap:")) 

habe ich die notwendige zugehörige Funktion:

func handleTap(gestureRecognizer: UITapGestureRecognizer){ 
    print("In handler") 
} 

On auf der Ansicht, Klopfen in Frage, "In Handler wurde nie auf die Konsole gedruckt". Ich entfernte dann die Handler-Funktion, um zu sehen, ob der Compiler sich über die fehlende Funktion beschweren würde. Es tat es nicht.

Ich bin positiv ratlos. Ich würde wirklich jedes Licht schätzen, das sich die Leute ausdenken können.

aktualisieren: Meine Klasse ist eigentlich ein UIImageView als

+1

Try 'self.view.addGestureRecognizer' Ich habe es in Swift nicht ausprobiert, aber das ist, was ich in Objective C. verwenden –

+0

, dass ich mit' self.userInteractionEnabled' bedeutet, dass Diese Codefragmente befinden sich tatsächlich in der Ansicht, an der ich interessiert bin. Als solches ist 'self.view' eine Unmöglichkeit! Danke für den Beitrag trotzdem! – Didia

Antwort

6

ich die Antwort nach sorgfältig durchkämmen meinen Code entdeckt.

Eines der übergeordneten Ansichten ohne Zufuhr eines frame:

erstellt wurde, während es ein noobish genug Fehler ist Löschung dieser Fragen zu rechtfertigen, stehen die Chancen jemand anderes wird auch in Zukunft das gleiche Problem haben ...

+0

Ich habe gerade das gleiche Problem. Was meinst du damit, dass eine der Elternansichten erstellt wurde, ohne einen Rahmen zu liefern? Wie machst Du das? – guest

+0

Ich hatte genau dasselbe Problem. Ich hatte eine Sicht mit einer Untersicht UIScrollView, die eine Unteransicht UIImageView hatte.Ich habe den Rahmen für die UIImageView nicht angegeben, und das hat verhindert, dass die Schaltflächen funktionieren. Vielen Dank! – allocate

+0

Weiß jemand, warum dies dazu führen würde, dass der Gestenerkenner die Berührung nicht erkennt ..? – Entalpi

5

Höchstwahrscheinlich werden Sie UIGestureRecognizer hinzufügen in falschen Ort uiview gegenüber. Hier funktioniert Probe mit UIView von storyboard. Wenn Sie Ihre UIView dynamisch erstellen, sollten Sie diese Initialisierung im richtigen Konstruktor ablegen.

class TestView: UIView 
{ 
    override func awakeFromNib() 
    { 
     self.userInteractionEnabled = true 
     self.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "handleTap:")) 
    } 

    func handleTap(gestureRecognizer: UITapGestureRecognizer) 
    { 
     println("Here") 
    } 
} 
6

Versuchen Sie, diese

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 
    self.view.userInteractionEnabled = true 
    var tapGesture = UITapGestureRecognizer(target: self, action: Selector("handleTap:")) 
    self.view.addGestureRecognizer(tapGesture) 
} 

func handleTap(sender : UIView) { 

    println("Tap Gesture recognized") 
} 
+1

Danke, das Hinzufügen von userInterActionEnabled zu meinem UIImageView war die Lösung in meinem Fall. – Moonwalkr

0

Dieser Code funktioniert für mich mit XCode 7.0.1

import UIKit 

class ImageView: UIImageView { 

    init(frame: CGRect, sender: Bool, myImage: UIImage) { 
     super.init(frame: frame) 
     self.image = myImage 
     initBorderStyle(sender) 

     // enable user interaction on image. 
    self.userInteractionEnabled = true 
    let gesture = UITapGestureRecognizer(target: self, action: "previewImage:") 
    addGestureRecognizer(gesture) 

    } 

    required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
    } 

    func previewImage(myGesture: UITapGestureRecognizer? = nil) { 
     print("i'm clicked") 
    } 

private func initBorderStyle(sender: Bool) { 
    self.layer.masksToBounds = true 
    self.layer.cornerRadius = 8 
    self.layer.borderWidth = 0.5 
    self.layer.borderColor = getBorderColor(sender) 
    self.backgroundColor = getColor(sender) 
} 


func getBorderColor(sender: Bool) -> CGColor { 
    var result: CGColor 
    if sender { 
     result = UIColor(red: 0.374, green: 0.78125, blue: 0.0234375, alpha: 0.5).CGColor 
    } else { 
     result = UIColor(red: 0.3125, green: 0.6015625, blue: 0.828125, alpha: 0.5).CGColor 
    } 
    return result 
} 
} 
70

ich eine Tap Gestenerkenner wurde mit, dass ich auf einem UILabel platziert mit Storyboard.

Um dies zum Laufen zu bringen, musste ich auch einen Haken in den Block "User Interaction Enabled" im UIabel's Attribute Inspector im Storyboard setzen.

enter image description here

+1

Das ist es! So funktioniert es! – Arnlen

+3

Ja, das ist es - vergaß ich in der Zeit, seit ich das letzte Mal eine App gebaut habe. Scheint etwas, das beim Anhängen der Gestenerkennung automatisiert werden sollte. – huygir

+1

Funktioniert für mich, thx – zgcharley