2016-04-21 2 views
2

Я создаю UIView программным способом в статическом методе и хочу добавить UITapGestureRecognizer, который вызовет другой статический метод в моем классе Helper.Настройка статического метода как действие UITapGestureRecognizer в 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!!!") 
} 

Но он заканчивает со следующим сообщением, вероятно, из-за статического характера моего метода. Также Helper.swift просто класс стриж (не UIView или UIViewController)

Ошибка:

Unrecognized selector +[JaClassified.Helper transViewTapped:]

+0

какая версия быстрого использования вы используете? –

+0

'swift 2.0' @Cheng – umair151

ответ

2

Если ваш класс не является потомком NSObject, вам, возможно, придется преодолеть static func в Objective-C (с старинный селектор Objective-C работает на NSObject с).

Таким образом, в вашем случае, вы можете либо объявить вам Helper класс как

class Helper: NSObject { 
    ... 
} 

или вы можете соединить ваш transViewTapped: к Objective-C префиксом его с @objc

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

Надежда помогает.

+1

Это не сработало для меня - я все равно получаю ошибку« непризнанный селектор ». Я регистрирую селектор с центром уведомлений следующим образом: NotificationCenter.default.addObserver (LocationTracker.instance, selector: #selector (orient), name: Notification.Name.UIDeviceOrientationDidChange, object: nil). orient() - статический метод. LocationTracker наследуется от NSObject. Что-то плохое я делаю? –

Смежные вопросы