2016-06-04 10 views
7

Próbuję dodać etykiety w Swift, które są dodawane w pętli. Następnie chcę dodać wydarzenie "TapGesture" do każdego z nich, gdy zostaną dodane. Działa, ale problem polega na tym, że wywoływana funkcja pobiera dane z etykiety do użycia po kliknięciu, ale etykieta została przedefiniowana do tego czasu i pobiera dane z ostatnio dodanego, a nie tego, które zostało kliknięte. Jak mogę uczynić każdy z nich wyjątkowym?Jak "addTarget" do UILabel w 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 
    } 
} 

Poniższy kod rozpoznawania jest gest, który pobiera dane etykiety i używa go:

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

Ok dziękuję. –

+0

Z opublikowanego kodu wynika, że ​​masz tylko jedną etykietę. Zmieniasz jego atrybuty, ale nie tworzysz nowego (chyba że jest to kod, którego nie uwzględniłeś). –

Odpowiedz

6

Funkcja obsługi dla UITapGestureRecognizer jest przeszły UITapGestureRecognizer jako sender. Możesz uzyskać dostęp do view, do której jest on podłączony z właściwością view. Proponuję coś takiego:

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

    ... 
} 

Potrzebny będzie również zmienić podpis swojego selektora:

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

lub wcześniejszych wersjach SWIFT:

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

To działało idealnie. Dziękuję Ci! –

+0

Mam teraz problem z dodaniem wartości dla undefinedkey dla każdej etykiety? Próbuję przechowywać w tym dane, ale wciąż pojawia się komunikat "UncaughttException" i "to nie jest kluczowa skarga dotycząca kodowania". –

+0

Co próbujesz zrobić? Zaktualizuj tekst etykiety? Czy możesz pokazać linię kodu, podając błąd? – vacawama

Powiązane problemy