2016-07-13 9 views
12

を送った私は、プログラムUIViewを作成し、それにUIPanGestureRecognizerを追加しました:スウィフト3:認識されていないセレクタがXcodeの8インスタンスへ

class ViewController: UIViewController{ 
    var preludeView: UIView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     initViews() 
     createConstrants() 

     let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: Selector(("handleTap:"))) 
     preludeView.addGestureRecognizer(panGestureRecognizer) 
    } 

    func handleTap(recognizer: UIPanGestureRecognizer) { 
     print("WORKING!!!!") 
    } 

    func initViews() { 
     ... 
    } 

    func createConstrants() { 
     ... 
    } 
} 

しかし、私は、ビューのXcodeがエラーを投げている触れています:

2016-07-13 09:24:29.918 Draft_Hypa_02[661:83024] -[Draft_Hypa_02.ViewController handleTap:]: unrecognized selector sent to instance 0x17d94a10 2016-07-13 09:24:29.921 Draft_Hypa_02[661:83024] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Draft_Hypa_02.ViewController handleTap:]: unrecognized selector sent to instance 0x17d94a10' * First throw call stack: (0x249cf91b 0x2416ae17 0x249d52b5 0x249d2ee1 0x248fe238 0x294ae9eb 0x290e984f 0x28f7aff1 0x294afd4f 0x28f3ba57 0x28f38017 0x28f78ec9 0x28f7867b 0x28f49125 0x28f476d3 0x24991dff 0x249919ed 0x2498fd5b 0x248df229 0x248df015 0x25ecfac9 0x28fb1189 0x93144 0x24587873) libc++abi.dylib: terminating with uncaught exception of type NSException

しかし、handleTap関数の引数を削除し、Selector(("handleTap:"))のコロンを削除すると、すべて正常に機能します。

既にこの問題を解決するために1日を費やしており、ご協力いただきありがとうございます。

答えて

28

あなたはこの

#selector(self.handleTap(recognizer:)) 
+1

Xcodeが "値の型を捨てています" ViewController 'メンバーがいませんhandleTap' " – Raul

+3

@Forzeメソッドの最初のパラメータの前にアンダースコアを追加する必要もあります。 'func handleTap(_ recognizer:UIPanGestureRecognizer){' –

+0

@Niravありがとう、それは動作します! Swift 3では、行動機能の外部名を設定する必要がありますか? – Raul

6

ようにする必要があります3あなたselectorswiftを使用している場合は、別の方法でこの文を書く必要があります。代わりに

let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: Selector(("handleTap:")))

新しい方法

let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(YourViewController.handleTap(_:)))

+0

Xcode 8が "値の型を捨てています" ViewController 'メンバーがありませんhandleTap' " – Raul

+0

ViewControllerまたはviewControllerの名前の代わりにselfを使用します –

+0

@Forze:handleTapはメソッドの名前です。あなたは呼び出しています func handleTap UIPanGestureRecognizer){} –

2
class ViewController: UIViewController { 

    let customView = UIView() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(handleTap(_:))) 
     customView.addGestureRecognizer(panGestureRecognizer) 
    } 

    func handleTap(panGesture: UIPanGestureRecognizer) { 

    } 
} 

のライン

let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(ViewController.handleTap(_:)))

次 使用はVCにカスタムのUIViewを追加することを忘れないでください。

+0

initViews()にUIViewを追加して、この関数をviewDidLoad()に追加しました。 – Raul

関連する問題