iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 21
0
Software Development

無中生有-從SWIFT語法學習到iOS APP的開發系列 第 21

Day21 - 消失的 Tab Bar

前言

唉~~延續昨天的問題,因為用了 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 來儲存資料

1.先把原本的 segue 連結取消

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
//        }

2. save button 拉進 drinkViewController.swift

一樣的判別式,只是這次把陣列存進 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")
        
        }

3.完成,效果...差強人意...?

簡單說明一下,第一次點好飲料之好,按下 save 按鈕,結果購物車卻沒有顯示內容,但是重新開啟 App 之後,購物車就讀取到資料了!

這是因為 UserDefault 是存到本機,供下次重新開啟 App 後可以讀取。

接下來只要換個儲存方式就可以了~


上一篇
Day20 - 儲存訂單 (segue傳值)
下一篇
Day22 - 檔案管理
系列文
無中生有-從SWIFT語法學習到iOS APP的開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言