2016-07-13 46 views
12

Ho programmazione creato un UIView e ha aggiunto UIPanGestureRecognizer ad esso:Swift 3: selettore non riconosciuto inviato ad esempio 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() { 
     ... 
    } 
} 

Ma quando sto toccando il Xcode vista sta gettando un errore:

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

Tuttavia, se rimuovo l'argomento nella funzione handleTap e rimuovi i due punti nello Selector(("handleTap:")), tutto funziona correttamente!

Già trascorso un giorno per provare a risolvere questo problema e sarebbe molto apprezzato per il vostro aiuto!

risposta

28

Se si utilizza swift 3 vostra selector dovrebbe essere come questo

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

Xcode lancia "Valore di tipo 'ViewController' non ha un membro 'handleTap'" – Raul

+3

@Forze è necessario aggiungere un trattino di sottolineatura prima del metodo first parameter. 'func handleTap (_ recognizer: UIPanGestureRecognizer) {' –

+0

@Navav grazie, Funziona! Sai in Swift 3 dobbiamo impostare il nome esterno per la funzione di azione? – Raul

6

Si dovrebbe scrivere questa dichiarazione in modo diverso. uso seguente riga

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

invece di

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

nuovo modo

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

+0

Xcode 8 sta lanciando "Valore di tipo 'ViewController' non ha un membro 'handleTap'" – Raul

+0

usa self invece di ViewController o nome del viewController –

+0

@Forze: handleTap è il nome del metodo, chiami func handleTap (mittente: 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) { 

    } 
} 

Non dimenticate aggiungere l'UIView personalizzato al VC.

+0

Sto aggiungendo UIView in initViews() e metto questa funzione nel viewDidLoad() – Raul