2016-02-25 15 views
5

Przygotowuję aplikację ze zmienną ilością widoków za pomocą narzędzia TapGestureRecognizer. Gdy widok jest wciśnięty, i obecnie robię towysyłanie argumentu parametru do funkcji za pomocą selektora UITapGestureRecognizer

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

ale w mojej funkcji „handleTap”, chcę, aby nadać mu dodatkowy parametr (a nie tylko nadawcy) jak tak

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

Jak wysłać konkretny nagłówek (który jest unikalny dla każdego widoku) jako argument funkcji handleTap?

Odpowiedz

18

Zamiast tworzyć rodzajowe UITapGestureRecognizer, podklasy go i dodać obiekt do nagłówka:

class MyTapGestureRecognizer: UITapGestureRecognizer { 
    var headline: String? 
} 

Następnie użyj że zamiast:

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. 
    } 
} 

próbowałem tego. To działało świetnie.

+0

część akcji jest nieaktualna. Również nie wydaje się już działać. – SoundShock

+1

akcja: selektor (ViewController.tapped (_ :)) func tapped (_ gestureRecognizer: MyTapGestureRecognizer) {...} – troligtvis

Powiązane problemy