唉~~延續昨天的問題,因為用了 save button 連結到 ShoppingCart View Controller,結果 Tab Bar 就消失了啊~~
消失的原因很簡單,就是因為用了 segue,他直接整個畫面跳離 Tab Bar controller,而直接調用了 ShoppingCart View Controller。那畫面當然只剩 ShoppingCart了...
我嘗試在ShoppingCart View Controller上做一個按鈕回 tab bar controller, tab bar就回來囉!
看起來好像可以,但是不是我們的初衷,另外返回 Tab Bar Controller後,陣列的資料都重新初始化,也全部歸0了啊~~
那問題就變成,怎麼用 save button 存資料,然後讓ShoppingCart View Controller 直接取用資料呈現,所以回到一開始的想法,用 userDefaults 來儲存資料
drinkViewControllew.swift中的prepare(for segue: UIStoryboardSegue, sender: Any?)也要槓掉
// override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// if segue.identifier == "segue" {
// let VC = segue.destination as! ShoppingCartViewController
// teaList.forEach { teaList in
// if teaList.value > 0 {
// if let i = selecTeaName.index(of: teaList.key) {
// selecTeaCount[i] = teaList.value
// } else {
// selecTeaName.append(teaList.key)
// selecTeaCount.append(teaList.value)
// }
// } else {
// if let i = selecTeaName.index(of: teaList.key) {
// selecTeaName.remove(at: i)
// selecTeaCount.remove(at: i)
// }
// }
// }
// VC.shoppingCartName = selecTeaName
// VC.shoppingCartCount = selecTeaCount
// }
一樣的判別式,只是這次把陣列存進 UserDefaults,方法可以參考我之前的文章 臨時儲存,並分別命名為 "TeaName" & "TeaCount"
@IBAction func saveOrder(_ sender: UIBarButtonItem) {
teaList.forEach { teaList in
if teaList.value > 0 {
if let i = selecTeaName.index(of: teaList.key) {
selecTeaCount[i] = teaList.value
} else {
selecTeaName.append(teaList.key)
selecTeaCount.append(teaList.value)
}
} else {
if let i = selecTeaName.index(of: teaList.key) {
selecTeaName.remove(at: i)
selecTeaCount.remove(at: i)
}
}
}
UserDefaults.standard.set(selecTeaName , forKey:"TeaName")
UserDefaults.standard.set(selecTeaCount , forKey:"TeaCount")
}
簡單說明一下,第一次點好飲料之好,按下 save 按鈕,結果購物車卻沒有顯示內容,但是重新開啟 App 之後,購物車就讀取到資料了!
這是因為 UserDefault 是存到本機,供下次重新開啟 App 後可以讀取。
接下來只要換個儲存方式就可以了~