2016-06-21 44 views
1

我正在做一個測驗,對這個問題有多個正確的答案。例如,在下面的代碼中,對於「病變的顏色是什麼」的問題,正確答案是「粉紅色」。但我也希望它能夠認識到紅色也將被視爲正確的答案。有沒有一種方法可以爲一個問題編碼多個正確答案?任何幫助將不勝感激。謝謝!Swift - 如何讓文本字段在測驗中識別多個正確答案?

import Foundation 

import UIKit 

class Case1Q2ViewController: UIViewController, UITextFieldDelegate { 

@IBOutlet weak var imageButton: UIButton! 
@IBOutlet weak var nextButton: UIButton! 
@IBOutlet var questionLabel: UILabel! 

@IBOutlet var correctAnswerLabel: UILabel! 

@IBOutlet var inputTextField: UITextField! 

var enteredAnswer: String? 

var correctAnswers = ["Pink", "Red"] 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(Case1Q2ViewController.keyboardWillShow(_:)), name: UIKeyboardWillShowNotification, object: nil) 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(Case1Q2ViewController.keyboardWillHide), name: UIKeyboardWillHideNotification, object: nil) 

    inputTextField.delegate = self 

    titlesForLabels() 
    nextButton.enabled = false 

    imageButton.layer.cornerRadius = 2; 
    imageButton.layer.borderWidth = 2; 
    imageButton.layer.borderColor = UIColor.blackColor().CGColor 

    questionLabel.layer.cornerRadius = 2; 
    questionLabel.layer.borderWidth = 2; 
    questionLabel.layer.borderColor = UIColor.blackColor().CGColor 

} 

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

func titlesForLabels() { 
    questionLabel.text = "What is the colour of the lesion(s)?" 
    correctAnswerLabel.text = correctAnswers.joinWithSeparator(", ") 
    correctAnswerLabel.hidden = true 

    inputTextField.text = nil 
    inputTextField.enabled = true 
} 

func keyboardWillShow(notification: NSNotification) { 
    let userInfo = notification.userInfo! 

    let keyboardFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue() 

    UIView.animateWithDuration(0.1, animations: {() -> Void in 
     self.view.frame.origin.y = -keyboardFrame.size.height 
    }) 
} 

func keyboardWillHide() { 
    UIView.animateWithDuration(0.1, animations: {() -> Void in 
     self.view.frame.origin.y = 0 
    }) 
} 

func textFieldShouldReturn(textField: UITextField) -> Bool { 
    textField.resignFirstResponder() 

    enteredAnswer = textField.text 

    checkForCorrectAnswer() 

    return true 
} 

func checkForCorrectAnswer() { 
    let answer = enteredAnswer!.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()) 
    if correctAnswers.contains(answer.lowercaseString) { 
     print("Correct") 
     correctAnswerLabel.textColor = UIColor.greenColor() 
     correctAnswerLabel.text = "Correct!" 
     nextButton.enabled = true 

    } else { 
     print("Wrong Answer") 
     correctAnswerLabel.textColor = UIColor.redColor() 
     correctAnswerLabel.text = "Incorrect! Please try again" 
     nextButton.enabled = false 

    } 
    correctAnswerLabel.hidden = false 
} 
override func viewWillAppear(animated: Bool) { 
    navigationItem.title = "Case 1: Q2" 
} 

}

+1

使'correctAnswer'爲所有可接受答案的數組並檢查是否correctAnswer .contains(enteredAnswer)' – dan

+0

@dan,我對編碼和swift很陌生。有什麼方法可以讓我看看我的代碼? – Babz

+0

@Babz:歡迎來到StackOverflow,Programming和Swift!如果我可以提供一個建議,那麼在請求某人爲您寫(尤其是簡單的)之前,您可以親自實施一個解決方案。 Apple的遊樂場使這一點變得特別簡單,因爲您可以實時看到代碼的輸出。祝你好運,希望你做一個殺手級應用程序:) –

回答

2

您可以通過var correctAnswers = ["pink", "red"]

免去您var correctAnswer = "Pink"線然後,在你checkForCorrectAnswer()方法保持正確答案的數組,你必須檢查是否正確答案的數組包含輸入的答案爲:

func checkForCorrectAnswer() { 
    let answer = enteredAnswer!.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()) 
    if correctAnswers.contains(answer.lowercaseString) { 
     // Correct 
    } else { 
     // Incorrect 
    } 
} 
+0

我剛剛得到一個錯誤(無法指定'String'類型的值來鍵入'String')當我這樣做時 'func titlesForLabels(){ questionLabel.text =「病變的顏色是什麼?」 ** correctAnswerLabel.text = correctAnswers ** correctAnswerLabel.hidden = true' 如何解決此問題的任何建議? – Babz

+0

這將取決於您希望標籤的外觀。你可以做'correctAnswerLabel.text = correctAnswers.joinWithSeparator(「,」)' – dan

+0

我做了你的建議並編輯了上面的代碼以反映你推薦的改變。但是,現在文本框不會將粉紅色或紅色識別爲正確的答案。當我運行模擬器並在文本框中輸入紅色時,它說不正確!請再試一次。當我輸入粉紅色時,同樣的事情發生。我錯過了什麼嗎? – Babz

相關問題