2016-06-04 13 views
7

Ich versuche, Etiketten in Swift hinzufügen, die in einer Schleife hinzugefügt werden. Ich möchte dann ein "TapGesture" -Ereignis zu jedem hinzufügen, wenn sie hinzugefügt werden. Es funktioniert, aber das Problem besteht darin, dass die aufgerufene Funktion Daten von der zu verwendenden Beschriftung verwendet, wenn sie angeklickt wird, aber die Beschriftung wurde dann neu definiert und es werden Daten von der zuletzt hinzugefügten verwendet, nicht die angeklickte. Wie kann ich jedes einzigartig machen?Wie 'AddTarget' zu UILabel in Swift

self.label.attributedText = self.myMutableString 
let tapGesture = UITapGestureRecognizer(target: self, action: handleTap(label)) 
self.label.userInteractionEnabled=true 
self.label.addGestureRecognizer(tapGesture) 
self.label.font = UIFont.boldSystemFontOfSize(28) 
self.label.sizeToFit() 
self.label.center = CGPoint(x: screenWidth, y: top) 
if(kilom>=30||self.located==false){ 
    self.scroller.addSubview(self.label) 
    if(device=="iPhone"||device=="iPhone Simulator"){ 
     top = top+80 
    } 
    else{ 
     top = top+140 
    } 
} 

Der folgende Code ist die Gestenerkenner, dass das Etikett Daten und verwendet es wird:

func handleTap(sender:UILabel){ 
    var a = self.label.text 
    let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil) 

    let resultViewController = storyBoard.instantiateViewControllerWithIdentifier("displayer") 

    self.presentViewController(resultViewController, animated: true, completion: nil) 
} 
+0

Okay, danke. –

+0

Aus dem Code, den Sie gepostet haben, scheint es, dass Sie nur ein Label haben. Sie ändern seine Attribute, aber Sie erstellen kein neues (außer es ist in Code, den Sie nicht enthalten). –

Antwort

6

Die Behandlungsfunktion für eine UITapGestureRecognizer die UITapGestureRecognizer als sender geben wird. Sie können auf das view zugreifen, mit dem es mit der view-Eigenschaft verknüpft ist. Ich würde so etwas wie dies vorschlagen:

func handleTap(sender: UITapGestureRecognizer) { 
    guard let a = (sender.view as? UILabel)?.text else { return } 

    ... 
} 

Sie werden auch die Unterschrift Ihres Wähler ändern müssen:

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap)) 

oder für frühere Versionen von Swift:

let tapGesture = UITapGestureRecognizer(target: self, action: "handleTap:") 
+0

Es hat perfekt funktioniert. Vielen Dank! –

+0

Ich habe jetzt die Mühe, einen Wert für einen undefinedkey für jedes Etikett hinzuzufügen? Ich versuche, Daten darin zu speichern, aber immer einen Fehler zu bekommen, der sagt "UncaughtNSException" und "dies ist keine Schlüsselcodierungsbeschwerde" –

+0

Was versuchst du zu tun? Aktualisieren Sie den Text des Etiketts? Können Sie die Codezeile anzeigen, die den Fehler angibt? – vacawama

Verwandte Themen