2016-04-21 12 views
0

Ich versuche, eine Gestenerkenner auf meinem UIImageView von meinen UIViewController-Erweiterungen Methoden hinzuzufügen.Wie Gestenerkennung mit Klassenmethode als Selektor hinzufügen?

Die Methode, die ich schießen soll, wenn das Bild abgegriffen ist eine Klassenmethode in meinen schnellen Erweiterungen erklärt:

class func openPopViewWithText(text: String!) { 
    print("fire!") 
} 

ich auch die Wähler aus meinen Erweiterungen Klasse hinzufügen. Dies ist, wie ich die Wahl hinzufügen:

infoImageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(UIViewController.openPopViewWithText(_:)))) 

Und das ist der Fehler, die ich bekomme, wenn ich die Image tippen:

[XXXDisplayStatsViewController openPopViewWithText:]: unrecognized selector sent to instance 0x7fd31520ada0 

kompletten Code in meinen Erweiterungen Klasse:

public extension UIViewController { 


func addInfoImageViewWithText(infoText: String){ 
    let margins : CGFloat = 30.0 
    let infoImageView : UIImageView = UIImageView(image: UIImage(named: "info")); 
    let yOrigin : CGFloat = ((self.view.y + self.view.height) - infoImageView.height) - margins 
    infoImageView.frame = CGRectMake(margins, yOrigin, infoImageView.width + 5, infoImageView.height + 5) 
    self.view.insertSubview(infoImageView, atIndex: 0) 
    self.view.bringSubviewToFront(infoImageView) 
    infoImageView.userInteractionEnabled = true 
    infoImageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(UIViewController.openPopViewWithText(_:)))) 
} 

class func openPopViewWithText(text: String!) { 
    print("fire!") 
} 
} 

Antwort

1

Das Problem besteht darin, dass das erste Argument in Ihrer openPopViewWithText-Funktion String statt UITapGestureRecognizer ist. Wenn Sie auf tippen, wird der Gestenerkenner UIImageView ausgelöst und übergibt die Gestenerkennerinstanz an den Selektor, damit Sie seine Eigenschaften verfolgen können. Also, was Sie tun sollten, ist die aktuelle Funktion Signatur dies ändern:

class func openPopViewWithText(recognizer: UITapGestureRecognizer) { 
    print("fire!") 
} 

Other than that, sollten Sie nicht Klasse-Funktionen verwenden, weil Sie nicht in der Lage sein, alle UIViewController Eigenschaften zuzugreifen.

+0

Ich verstand für das erste Problem. Für das zweite Problem möchte ich nicht auf meine UIViewController-Eigenschaften zugreifen. Ich möchte nur eine generische Methode für alle meine UIViewControllers erstellen, die einen popViewController anzeigen, wenn das Bild angetippt wird. – AnthonyR

+0

Sie können also den 'String'-Typ einfach in' UITapGestureRecognizer' –

+0

'... infoImageView umwandeln. userInteractionEnabled = true infoImageView.addGestureRecognizer (UITapGestureRecognizer (Ziel: selbst, Aktion: #selector (UIViewController.openPopViewWithText (_ :)))) } Klasse func openPopViewWithText (Erkenner: "Feuer" UITapGestureRecognizer) { print() } ' Es löst nicht das Problem Ich habe immer den Fehler, aber ich denke, es kommt von dem Ziel, das ich in addGestureRecognizer-Methode gesetzt habe, habe ich' selbst ', so die ViewCon troller versucht diese Methode 'openPopViewControllerWithText' zu finden, aber da diese Methode eine Klassenmethode ist, kann sie nicht gefunden werden. – AnthonyR

Verwandte Themen