2016-03-29 13 views
0

Ich experimentiere mit Tasten, und ich habe in was ist wahrscheinlich ein einfaches Problem geraten. Ich habe zwei Knöpfe und zwei Etiketten.Wie registriert man mehrere Tasten mit UIKit in Swift?

Die Labels generieren zufällige String-Werte von entweder "A" oder "B". Ich möchte, dass die korrekte Bezeichnung verschwindet, wenn die entsprechende Schaltfläche ausgewählt ist.

Ich habe den folgenden Code, aber ich habe ein Problem festgestellt. Wenn die Buchstaben identisch sind, werden beide Beschriftungen ausgeblendet, wenn die entsprechende Schaltfläche angetippt wird.

Ich verstehe, warum das passiert, denke ich. Es ist, weil mein Code ausgeführt wird, wenn buttonA einmal angetippt wird (ich habe noch nicht auf Knopf B angefangen, also tut es nichts.)

Also meine Frage ist, wie benötige ich 2 Taps? Mit anderen Worten, wenn label_1 und label_2 beide als String "A" angezeigt werden, wie würde der Benutzer den ButtonA zweimal drücken müssen? Wenn mehr Code benötigt wird, lassen Sie es mich in den Kommentaren wissen.

@IBOutlet weak var label_1: UILabel! 
    @IBOutlet weak var label_2: UILabel! 
    @IBOutlet weak var label_3: UILabel! 
    @IBOutlet weak var label_4: UILabel! 
    @IBOutlet weak var label_5: UILabel! 


    var visibleLetters = ["A", "B", "Z", "X"] 
    var text = "", text2 = "", text3 = "", text4 = "", text5 = "" 
    let aButton = "A", bButton = "B", zButton = "Z", xButton = "X" 
    var x = 0 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     createRandomLetter(text, aSecondLetter: text2, aThirdLetter: text3, aFourthLetter: text4, aFifthLetter: text5) 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    @IBAction func buttonA(sender: UIButton) { 

     if aButton == label_1.text { 
      label_1.hidden = true 
      label_1.tag += 1 
     } 

     else { 
      //play animation 
      print("play animation") 
     } 
    } 

    @IBAction func buttonB(sender: UIButton) { 
     if bButton == label_1.text { 
      label_1.hidden = true 
     } 
    } 

    @IBAction func buttonX(sender: UIButton) { 
     if xButton == label_1.text { 
      label_1.hidden = true 
     } 
    } 

    @IBAction func buttonZ(sender: UIButton) { 
     if zButton == label_1.text { 
      label_1.hidden = true 
     } 
    } 



    func createRandomLetter(individualLetter: String, aSecondLetter: String, aThirdLetter: String, aFourthLetter: String, aFifthLetter: String) { 

     let individuaLetter = visibleLetters[Int(arc4random_uniform(UInt32(visibleLetters.count)))], 
     aSecondLetter = visibleLetters[Int(arc4random_uniform(UInt32(visibleLetters.count)))], 
     aThirdLetter = visibleLetters[Int(arc4random_uniform(UInt32(visibleLetters.count)))], 
     aFourthLetter = visibleLetters[Int(arc4random_uniform(UInt32(visibleLetters.count)))], 
     aFifthLetter = visibleLetters[Int(arc4random_uniform(UInt32(visibleLetters.count)))] 

     label_1.text = individuaLetter 
     label_2.text = aSecondLetter 
     label_3.text = aThirdLetter 
     label_4.text = aFourthLetter 
     label_5.text = aFifthLetter 
    } 

    func isCorrect() { 

     if aButton == label_1.text { 
      label_1.hidden = true 
      label_1.tag += 1 
     } 

     else if label_1.tag == 1 && aButton == label_2.text { 

     } 
     else { 
      //play animation 
      print("play animation") 
     } 
    } 
} 
+0

bin ich nicht sicher, was du machen willst. Kannst du mir mehr Details geben? – Ryan

+0

Ist label1 an buttonA und label2 an buttonB gebunden? Kannst du die Notwendigkeit zu zwei Taps erklären. – ryantxr

+0

Ich werde mein Bestes geben, um zu erklären, was ich will. Ich habe einen zufälligen Satz von Buchstaben und einen konstanten Satz von Knöpfen. Die Knöpfe sind immer A, B, X, Z (ich bereue es, die zusätzlichen Knöpfe so bald hinzuzufügen), also werde ich so tun, als ob ich kein X und Z hinzugefügt hätte. Also habe ich 2 Etiketten, die zufällig A oder B anzeigen Der Benutzer muss A drücken, wenn Label_1 A oder B anzeigt, wenn Label_1 B zeigt. Wenn der Benutzer die richtige Taste drückt, dann tut er das Gleiche für Label_2. – QuirkyCoder

Antwort

0

OK versucht, es herauszufinden, was Sie versuchen, ein Beispiel lassen tun. So haben Sie 4 Etiketten und 2 Tasten (A, B), die Etiketten haben zufällig generierte Werte von A, B, wenn Sie auf eine Schaltfläche klicken, die Sie überprüfen müssen, ob diese Schaltfläche den gleichen Text der Beschriftung hat, wenn es korrekt ist mach dasselbe mit label2, wenn es nicht korrekt ist, versuchen wir es weiter.

Eine logische Art und Weise, dies zu tun können, um Markierungen Ihre Etiketten zu verknüpfen (das ich glaube, Sie alredy es tun) und eine zeitliche Variable haben den Überblick über die aktuelle Bezeichnung für

Beispiel zu halten
var temporal:String! 
    var current_tag:Int = 1 
    override func viewDidLoad() { 
    super.viewDidLoad() 

    createRandomLetter(text, aSecondLetter: text2, 
    aThirdLetter: text3, aFourthLetter: text4, aFifthLetter: text5) 
    temporal = label1.text 

} 

    @IBAction func buttonZ(sender: UIButton) { 
    //Answer is correct 
    if zButton == temporal { 
     current_tag++ 
     IsCorrect(current_tag) 
    } 

} 
func Iscorrect(tag:Int) 
{ 

    if(label2.tag == tag) 
    { 
     temporal = label2.text 
    } 
    else if(label3.tag == tag) 
    { 
     temporal = label2.text 
    } 
    else if(label4.tag == tag) 
    { 
     temporal = label2.text 
    } 
} 

somethign So sollte das funktionieren, ich habe es nicht versucht, da ich von meinem Ipad antworte und ich keinen Zugang zu meinem Laptop habe, aber sowas sollte total funktionieren, irgendwelche Zweifel, ich kann dir helfen XD

+0

Ja! Genau das versuche ich zu tun! Jetzt versuche ich zu verstehen, warum es funktioniert. Außerdem erhalte ich diesen Fehler: Schwerwiegender Fehler: unerwarteterweise wurde nil beim Entpacken eines optionalen Werts gefunden. Ich habe mir gedacht, dass ich den Fehler erhalten habe, weil label2.tag nicht mit current_tag übereinstimmt, aber sie scheinen übereinzustimmen, also versuche ich herauszufinden, warum temporal keinen Wert hat. – QuirkyCoder

+0

Dieser Fehler muss passieren, wenn wir versuchen, eine Variable zu vergleichen, die nicht zugeordnet wurde, warum in der Ansicht didload Methode initialisiert ich zunächst temporal versuchen, zu etwas wie var temporal zu initialisieren: String = "" Ich werde zu Hause sein in ein paar Stunden, um es auszuprobieren bitte, wenn Antwort half Ihnen, es als richtig zu markieren XD –

+0

Ich habe verpasst, dass Sie die Variable in der ViewDidLoad zugewiesen. Nachdem ich eine Weile daran gearbeitet habe, denke ich, dass ich die Grundidee habe, was passiert. Danke für Ihre Hilfe. – QuirkyCoder