#24 喵德勒心理測驗|心理測驗App

練習資料傳遞技巧

⬇️ 成品如下~

✏️功能呈現

  • 自訂viewController
  • IBOutlet & IBAction
  • performSegue & IBSegueAction
  • popToRootViewController
  • UIAlertController

✏️程式說明

  1. 建立storyboard畫面時,先將答案的button及lable設定tag,後續再判斷答案時會用到

2. 建立一個file存取心理測驗的問題與答案,當答案數量不一樣時,先輸入空字串“ ”,讓所有答案數量統一

3. 在選擇問題的頁面中,顯示答案時,利用for in 及if else判斷答案數量,若出現空字串,則將答案鈕隱藏

for option in 0…4{
answerBtn[option].setTitle(questions[questionIndex].answer[option], for: .normal)
if questions[questionIndex].answer[option] == “” {
answerBtn[option].isHidden = true
}else{
answerBtn[option].isHidden = false
}
}

4. 設定button的tag,以辨識選到哪一個答案,並在前面宣告yourAnswer為Int的Array,因tag的型別是Int

判斷時利用 .insert ,插入數字,並放在你的答案的位置上,藉此讀出button(答案)的tag

let button = sender
let index = button.tag
switch index {
case 0:
yourAnswer.insert(0, at: ansIndex)
case 1:
yourAnswer.insert(1, at: ansIndex)
case 2:
yourAnswer.insert(2, at: ansIndex)
case 3:
yourAnswer.insert(3, at: ansIndex)
case 4:
yourAnswer.insert(4, at: ansIndex)
default:
break
}
print(yourAnswer)

ansIndex += 1
// 答完3題,利用performSegue將答案傳入下一頁
if ansIndex == 3 {
performSegue(withIdentifier: "showResult", sender: sender)
}

5. 這款心理測驗的選項皆有不同的意義,故在結果頁面中,須匯入另一個存取答案的Array,同樣答案數量不ㄧ樣時,先輸入空字串“ ”,並利用for in 來判斷要顯示的數量

for totalAns in 0..<ansDatabase[ansIndex].answer.count{
answerLable[totalAns].isHidden = false
answerLable[totalAns].text = ansDatabase[ansIndex].answer[totalAns]
}

6. 結果頁面的呈現,希望用色塊標示出你選的答案,如下圖所示

第一題,不出現上一頁,第二題以後才出現上一頁

這邊要用到最一開始設定的tag,在answerlable上設定tag,依序判斷選到的答案(設為tag後存成Int)是否等於answerlable的tag(Int),若為選到的答案則用顏色標示出來

這裡是最困擾我的地方,一開始都把答案存成字串,卻一直無法顯示,利用print才發現文字內容根本不一樣(例如第一題的選項是顏色,如紅,而在結果頁面,紅代表A. 精力…),所以顯示出來都是錯的,既然文字不通,那把答案都存成數字!數字總可以比較了吧!也是因為想到了要比數字才把button、lable都設定tag,這樣型別一樣,讀取後的資料顯示也相同

以上~完成!

心理測驗題目來源

🔆 GitHub

📝 參考來源

--

--