2016-02-25 37 views
5

Sto creando un'app con una quantità variabile di visualizzazioni tutte con un TapGestureRecognizer. Quando si preme la vista, io attualmente sto facendo questoinviando un argomento parametro per funzionare tramite il selettore UITapGestureRecognizer

func addView(headline: String) { 
    // ... 
    let theHeadline = headline 
    let tapRecognizer = UITapGestureRecognizer(target: self, action: Selector("handleTap:")) 
    // .... 
} 

ma nella mia funzione "handleTap", voglio dare un parametro aggiuntivo (piuttosto che solo il mittente) in questo modo

func handleTap(sender: UITapGestureRecognizer? = nil, headline: String) { 
} 

Come posso inviare il titolo specifico (che è unico per ogni vista) come argomento alla funzione handleTap?

risposta

18

Invece di creare un UITapGestureRecognizer generica, sottoclasse e aggiungere una proprietà per il titolo:

class MyTapGestureRecognizer: UITapGestureRecognizer { 
    var headline: String? 
} 

quindi utilizzare tale invece:

override func viewDidLoad() { 
    super.viewDidLoad() 

    let gestureRecognizer = MyTapGestureRecognizer(target: self, action: "tapped:") 
    gestureRecognizer.headline = "Kilroy was here." 
    view1.addGestureRecognizer(gestureRecognizer) 
} 

func tapped(gestureRecognizer: MyTapGestureRecognizer) { 
    if let headline = gestureRecognizer.headline { 
     // Do fun stuff. 
    } 
} 

ho provato questo. Ha funzionato alla grande.

+0

la parte di azione non è aggiornata. Inoltre, non sembra più funzionare. – SoundShock

+1

azione: selettore (ViewController.tapped (_ :)) func tocced (_ gestureRecognizer: MyTapGestureRecognizer) {...} – troligtvis