2016-02-25 10 views
5

Ich mache eine App mit einer variablen Anzahl von Ansichten alle mit einem TapGestureRecognizer. Wenn die Ansicht gedrückt wird, ich derzeit tue diesSenden eines Parameterarguments zur Funktion über UITapGestureRecognizer Selektor

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

aber in meiner Funktion „handleTap“, ich will ihm einen zusätzlichen Parameter geben (und nicht nur den Sender) wie so

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

Wie sende ich die spezifische Überschrift (die für jede Ansicht eindeutig ist) als Argument an die handleTap-Funktion?

Antwort

18

Statt einen generischen UITapGestureRecognizer zu schaffen, ist es eine Unterklasse und eine Eigenschaft für die Überschrift hinzufügen:

class MyTapGestureRecognizer: UITapGestureRecognizer { 
    var headline: String? 
} 

dann verwenden, statt:

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

Ich versuchte dies. Es hat super funktioniert.

+0

Aktionsteil ist veraltet. Scheint auch nicht mehr zu funktionieren. – SoundShock

+1

Aktion: Selektor (ViewController.tapped (_ :)) Func angezapft (_ gesticrecognizer: MyTapGestureRecognizer) {...} – troligtvis