iT邦幫忙

2025 iThome 鐵人賽

DAY 22
0
Mobile Development

我將點燃Swiftの大海系列 第 22

Day22. Swift一定要會のios鬧鐘復刻實作篇 (3)

  • 分享至 

  • xImage
  •  

昨天我們設定好資料庫後
今天我們帶大家學習 NavigationBar 的寫法

func setupNavigationBar ()

我們在用程式碼編寫元件時一樣要先寫一個 func 去包起來
接著和之前介紹的 setUi 一樣放入 viewDidLoad
所以我就不多說直接開始介紹 func 的內部寫法!( MainView 用的NavigationBar )

+號按鍵

func setupNavigationBar

首先我們需要有一個 navigationItem 然後設定他是 rightBarButtonItem
我們用 image 中的預設名為 plus+ 號圖案來做按鈕

            navigationItem.rightBarButtonItem =
            UIBarButtonItem(image: UIImage(systemName: "plus"),
                            style: .plain,
                            target: self,
                            action: #selector(addTapped))

Mark -- IBAction

接著我們要在 IBAction 中設定一個 func 去設定按鈕需要的功能( addTapped )
因為我們這次不是從 xib 拉元件所以這次我們要用 @objc 來做設定

@objc func addTapped() {
        //設定流程:
        //先將 ViewController 設定成常數 VC 
        //接著設定 delegate 給目前的頁面
        //最後 present 跳出 AddAlarmView
        let addAlarmVC = AddAlarmViewController(nibName: "AddAlarmViewController", 
                                                bundle: nil)
        addAlarmVC.delegate = self
        let navController = UINavigationController(rootViewController: addAlarmVC)
        self.present(navController, 
                     animated: true, 
                     completion: nil)
    }

編輯按鍵

func setupNavigationBar ()

接著回到 NavigationBar 本身的設定
同樣我們需要有一個 navigationItem 然後設定他是 leftBarButtonItem
在這邊我們用的是 編輯 兩個字來做按鈕所以我們要用 title 去設定字串

設定邏輯都是一樣的區別只在最前面的按鈕樣式以及最下面的 action

            navigationItem.leftBarButtonItem =
            UIBarButtonItem(title: "編輯",
                            style: .plain,
                            target: self,
                            action: #selector(editTapped))

Mark -- IBAction

同樣我們要在 IBAction 中設定一個 func 去設定編輯的功能 ( editTapped )
但是這次我們需要先設定一個變數來做 bool 判斷是不是在編輯模式

提醒:記得要去 Mark -- Proprtty 設定,熟悉將同類型程式碼歸位方便維護跟 debug 喔!

    var isEditingMode: Bool = false

接著我們要先設定一個 toggle 並設定 tableView 為編輯狀態
利用前面設定的 isEditingMode 來更改 button 的 title
最後遍歷所有的可見的 tableViewCell 並將隱藏的開關控件設置為編輯狀態

@objc func editTapped() {
    isEditingMode.toggle()
    tableView.setEditing(isEditingMode, animated: true)
    navigationItem.leftBarButtonItem?.title = isEditingMode ? "完成" : "編輯"

    tableView.visibleCells.forEach { cell in
        if let switchControl = (cell as? MainTableViewCell)?.swAlarm {
            switchControl.isHidden = isEditingMode
        }
    }
}

NavigationbarTitle

func setupNavigationBar

最後我們設定好 NavigationBar 的 title 就大功告成啦!
設定好原本會出現一個大標題為 鬧鐘 兩個字
接著當我們下滑到看不到大標題就會把標題放在 NavigationBar 的正中間喔!

            navigationController?.navigationBar.prefersLargeTitles = true
            navigationItem.title = "鬧鐘"

結論

雖然看起來設定步驟有些繁瑣,但其實整體程式碼只要理解作用就能很順的一個接一個做完了!
所以要掌握實作機會多練習累積經驗形成肌肉記憶!


上一篇
Day21. Swift一定要會のios鬧鐘復刻實作篇 (2)
下一篇
Day23. Swift一定要會のios鬧鐘復刻實作篇 (4)
系列文
我將點燃Swiftの大海25
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言