2017-02-11 14 views
0

Ich mache eine App in Xcode, wo ein Bildschirm auftaucht, der Sie auffordert, 2 Zahlen zu multiplizieren, und dann legen Sie das Produkt in ein Textfeld und wenn die Antwort richtig ist, wird eine Schaltfläche, die grau ist wird blau werden.UITextField Eingabe funktioniert nicht

Das Problem ist, dass es nicht funktioniert, auch wenn ich sicher bin, meine Antwort beim Testen der App wird es nicht funktionieren, wird der Button grau bleiben und die App wird denken, die Antwort ist falsch, bitte helfen Sie mir und erzählen mir was ist falsch mit meinem Code!

var firstNumber = arc4random() 
    var secondNumber = arc4random() 
    @IBOutlet weak var AnswerButton: UIButton! 
    @IBOutlet weak var OutcomeNumber: UILabel! 
    @IBOutlet weak var textField: UITextField! 


    @IBAction func textFieldEditingDidChange(_ sender: Any) { 
     print("textField: \(textField.text)") 
     if ValidatePassword(text: textField.text!) { 
      AnswerButton.isEnabled = true 
     } else { 
      AnswerButton.isEnabled = false 
     } 
    } 

    @IBAction func AnswerButtonPressed(_ sender: Any) { 
     print("you may enter") 

     view.backgroundColor = UIColor.green 
    } 

    func ValidatePassword(text: String) -> Bool { 
     var result = false 
     if text == ("(\(firstNumber*secondNumber))") { 
      result = true 
     } 
     return result 

    } 

    @IBAction func GObutton(_ sender: Any) { 
     OutcomeNumber.text = "\(firstNumber)×\(secondNumber)" 
     firstNumber = arc4random_uniform(10) 
     secondNumber = arc4random_uniform(10) 
    } 

    @IBAction func GoMedium(_ sender: Any) { 
     OutcomeNumber.text = "\(firstNumber)×\(secondNumber)" 
     firstNumber = arc4random_uniform(50) 
     secondNumber = arc4random_uniform(50) 
    } 

    @IBAction func GoHard(_ sender: Any) { 
     OutcomeNumber.text = "\(firstNumber)×\(secondNumber)" 
     firstNumber = arc4random_uniform(100) 
     secondNumber = arc4random_uniform(100) 
    } 


     override func viewDidLoad() { 
     super.viewDidLoad() 
     AnswerButton.isEnabled = false 
    } 

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

Antwort

2

Vielleicht ist das Problem auf diesem Teil:

func ValidatePassword(text: String) -> Bool { 
    var result = false 
    if text == "(\(firstNumber) * \(secondNumber))" { 
     result = true 
    } 
    return result 

} 

Zwischen * und \(secondNumber) sind zwei Räume. Wenn Sie mit Text (1 * 3) diese Funktion versuchen, kehrt false aber mit (1 * 3) kehrt true

Auf der anderen Seite, am besten ist Regular Expressions zu verwenden, um dies zu bewerten.

Das Ergebnis in Playground enter image description here

+0

Ich habe versucht, den Raum zu entfernen, aber nichts geändert, wie kann ich reguläre Ausdrücke verwenden, sorry im neuen zu Xcode, wenn Sie mich auf einen Artikel in Verbindung bringen könnte oder ein Tutorial oder mich einfach hier sagen ich wäre sehr dankbar –

+0

Ich habe ein Beispiel auf Spielplatz hinzugefügt und funktioniert perfekt. Um über 'Reguläre Ausdrücke' zu ​​lernen, können Sie dieses https://regexone.com verwenden – mhergon

0

Mhergon ist richtig. Das Problem ist Ihre Funktion, die die Antwort validiert. Ihre Code-Struktur und die Art, wie Sie die Antwort berechnen und akzeptieren, ist nicht richtig. Aber sieht gut aus für einen Starter. Wie auch immer, schauen Sie sich Ihren ValidatePassword Code an.

Versuchen Sie Ihren Code in der PlayGround von Xcode.

einen Blick auf dieses Beispiel aus dem Code genommen Nehmen wir nur verschiedene Variablen:

let x = 3 
let y = 4 

print("(\(x) * \(y))") 

Das "(3 * 4)"

Jetzt druckt, ändern Sie den Druck auf diese:

print("(\(x*y))") 

Es jetzt druckt die richtige Berechnung und Antwort, die ist.

EDIT

Sie sind die falsche Frage zu beantworten. Generieren Sie die Zufallszahlen, bevor Sie sie an den Benutzer ausgeben.

Sie können dieses Beispiel überprüfen, das ich machte. Um auch nach kürzeren Codes zu suchen. :)

https://github.com/glennposadas/TextFieldGame-iOS

+0

Ich versuchte auch, den Code zu ändern, was Sie noch keinen Unterschied vorschlugen, denken Sie, dass es noch irgendetwas geben könnte, das ich Änderung versuchen könnte? –

+0

Quick-Tipp, wissen Sie, wie Sie debuggen? Setzen Sie einige * Breakpoints * in Ihr 'if-else' Ihrer' textFieldDidChange' und in Ihr 'if' Ihres' ValidatePassword'. Dann drucke ihre Werte wie 'po textField.text!'. Auf diese Weise können Sie die Werte Ihrer Variablen und ihre Änderungen einfach nacheinander überprüfen. – Glenn

+0

ich bin wirklich verwirrt, kann jemand den Code testen und sehen, was geändert werden muss, so dass das Textfeld Variablen akzeptieren konnte, funktioniert es das erste Mal, aber danach ich nicht. –

Verwandte Themen