昨天我們設定好資料庫後
今天我們帶大家學習 NavigationBar
的寫法
我們在用程式碼編寫元件時一樣要先寫一個 func
去包起來
接著和之前介紹的 setUi
一樣放入 viewDidLoad
中
所以我就不多說直接開始介紹 func 的內部寫法!( MainView 用的NavigationBar )
首先我們需要有一個 navigationItem 然後設定他是 rightBarButtonItem
我們用 image 中的預設名為 plus
的 + 號圖案來做按鈕
navigationItem.rightBarButtonItem =
UIBarButtonItem(image: UIImage(systemName: "plus"),
style: .plain,
target: self,
action: #selector(addTapped))
接著我們要在 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)
}
接著回到 NavigationBar 本身的設定
同樣我們需要有一個 navigationItem 然後設定他是 leftBarButtonItem
在這邊我們用的是 編輯 兩個字來做按鈕所以我們要用 title
去設定字串
設定邏輯都是一樣的區別只在最前面的按鈕樣式以及最下面的 action
navigationItem.leftBarButtonItem =
UIBarButtonItem(title: "編輯",
style: .plain,
target: self,
action: #selector(editTapped))
同樣我們要在 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
}
}
}
最後我們設定好 NavigationBar 的 title 就大功告成啦!
設定好原本會出現一個大標題為 鬧鐘 兩個字
接著當我們下滑到看不到大標題就會把標題放在 NavigationBar 的正中間喔!
navigationController?.navigationBar.prefersLargeTitles = true
navigationItem.title = "鬧鐘"
雖然看起來設定步驟有些繁瑣,但其實整體程式碼只要理解作用就能很順的一個接一個做完了!
所以要掌握實作機會多練習累積經驗形成肌肉記憶!