#14 ⭐️ 心理測驗或問卷 App

因近期離職後發現整個人的狀態變得很好,也讓我反思先前的工作是否讓我累積了不少壓力,因此這次我打算使用壓力調查的問卷來完成此次作業。

這次作業使用了多種技術來提高用戶體驗和數據處理效率,包括使用segue技術進行數據傳遞、把功能函數抽取到其他文件以保持代碼整潔,並利用unwind技術來回到主頁面。此外,我還設計了日文和台灣中文兩種語言版本。

一、使用Segue進行數據傳遞

在StressScanApp中,我通過segue技術在不同的視圖控制器之間傳遞數據。當用戶完成問卷後,應用將使用segue將得分從SurveyViewController傳遞到resultViewController
下面這段代碼展示了如何在完成問卷後根據用戶得分導航至結果頁面,並將用戶得分和語言設置傳遞給結果頁面。

@IBSegueAction func resultSegue(_ coder: NSCoder) -> resultViewController? {
let controller = resultViewController(coder: coder)
controller?.result = score
controller?.language = language
return controller
}

二、功能函數的抽取

為了保持代碼的整潔,所有更新UI元素的功能函數我都放在了單獨的檔案function.swift中。這包括更新問題文本、答案按鈕,以及根據得分顯示結果。下面這個函數根據當前選擇的語言和問題編號更新問題標籤的內容和對齊方式。

func updateQuestion(language: String, count: Int, questionLabel: UILabel!, question: [Question]) {
if count < 5 {
switch language {
case "JP":
questionLabel.text = question[count].JP
questionLabel.textAlignment = .left
case "TW":
questionLabel.text = question[count].TW
questionLabel.textAlignment = .center
default:
questionLabel.text = question[count].JP
}
}
}

三、利用Unwind技術返回首頁

使用unwind segue是另一種在iOS開發中管理視圖控制器導航的方法。

@IBAction func unwindToRootViewController(segue: UIStoryboardSegue) {
}

這個方法允許用戶在完成問卷並查看結果後,直接返回應用的主頁面。

四、多語言設計

為了適應不同地區用戶的需求,這個應用支持日文和台灣中文兩種語言。使用者可以在主頁面選擇語言,之後所有問題和答案都將按選定的語言顯示。

@IBAction func languageChosen(_ sender: UIButton) {
switch sender.titleLabel?.text {
case "日本語" :
language = "JP"
case "中国語" :
language = "TW"
default :
language = "JP"
}

performSegue(withIdentifier: "languageChosenSegue", sender: nil)
}

這段代碼處理了語言選擇的動作,確保用戶的選擇被正確記錄並應用於後續的問卷頁面。

總結

1. 數據傳遞與界面導航

透過實現segue技術,我深入理解了iOS中界面之間的數據傳遞機制。特別是使用performSegueprepare(for:sender:)方法來傳遞數據,使我能夠更靈活地控制數據流向和界面行為,從而提升了應用的整體用戶體驗。

2. 代碼組織與模塊化

把功能性函數分離到獨立的文件中,如function.swift,讓我學會了如何更好地組織代碼以提高可讀性和可維護性。這種模塊化的做法不僅使代碼庫更加整潔,也便於未來的擴展和管理。

3. 多語言支持的實現

在實現多語言支持的過程中,我學到了如何設計一個靈活的語言切換機制,讓應用能夠支持不同的語言環境。這不僅增強了應用的國際化能力,也提高了其覆蓋的用戶範圍。

4. 使用Unwind Segue管理視圖控制器

通過實現unwind segue,我掌握了如何在複雜的導航結構中管理視圖控制器的返回行為。這使我能夠更好地控制應用的導航流程,確保用戶能夠順暢地在不同的界面間切換。

--

--