2016-04-21 12 views
2

Ich erstelle eine UIView programmgesteuert in der statischen Methode und möchte UITapGestureRecognizer hinzufügen, die eine andere statische Methode in meiner Helper Klasse aufrufen wird.Einstellen der statischen Methode als Aktion von UITapGestureRecognizer in Swift

Helper.swift:

static func showLoadingPopUp(frame: CGRect) -> UIView { 
    let transView = UIView.init(frame: frame!)  
    let tapGesture = UITapGestureRecognizer(target: self, action: "transViewTapped:") 
    transView.addGestureRecognizer(tapGesture) 
    return transView 
} 

static func transViewTapped(gesture: UITapGestureRecognizer) { 
    print("Oh Tapped!!!") 
} 

Aber es endet mit der folgenden Meldung nach oben wahrscheinlich wegen der statischen Natur meiner Methode. Auch ist Helper.swift einfache rasche Klasse (nicht UIView oder UIViewController)

Fehler:

Unrecognized selector +[JaClassified.Helper transViewTapped:]

+0

Welche Version von Swift verwenden Sie? –

+0

'Swift 2.0' @Cheng – umair151

Antwort

2

Wenn Ihre Klasse nicht ein Nachkomme von NSObject ist, müssen Sie möglicherweise die static func zu Objective-C zu überbrücken (seit Objektiv-C-Selektor des alten Stils arbeitet an NSObject s).

Also, in Ihrem Fall, können Sie entweder erklären Sie Helper Klasse als

class Helper: NSObject { 
    ... 
} 

oder können Sie Ihr transViewTapped: zu Objective-C durch Präfix überbrücken sie mit einem @objc

@objc static func transViewTapped(gesture: UITapGestureRecognizer) { 
    ... 
} 

Hoffnung es hilft.

+1

Dies funktionierte nicht für mich - ich bekomme immer noch" unerkannter Selektor "Fehler. Ich registriere den Selektor mit dem Benachrichtigungscenter wie folgt: NotificationCenter.default.addObserver (LocationTracker.instance, Selektor: #Selector (orient), Name: Notification.Name.UIDeviceOrientationDidChange, Objekt: nil). orient() ist eine statische Methode. LocationTracker erbt von NSObject. Alles was ich falsch mache? –

Verwandte Themen