今天的內容一樣是代辦清單的實作,主要是完成清單的畫面與程式碼的結合與呈現,並且把新增後的資料,重新載入呈現
現在,我們馬上開始!
@IBOutlet weak var contentLabel: UILabel!
@IBOutlet weak var checkButton: UIButton!
var id:String = ""
// complete todo
@IBAction func checkButtonPressed(_ sender: UIButton) {
let realm = try! Realm()
guard let todo =
realm.objects(ToDoList.self).filter("id =
'\(id)'").first else { return }
let isDone = todo.status == "\(Status.done)"
let updateStatus = isDone ? "\(Status.ongoing)" :
"\(Status.done)"
try! realm.write {
todo.status = updateStatus
todo.endTime = isDone ? nil : Date()
}
let image = UIImage(named: !isDone ? "Circle1" :
"Circle0")
checkButton.setImage(image, for: .normal)
}
透過id欄位,來辨別目前修改的資料是那一筆
狀態按鈕被點擊後,修改按鈕圖片,如果是進行中改為完成,如果是完成改為進行中
將資料回寫入Realm資料庫中
打勾為完成,圓圈為進行中
如果Todo清單完成後,會更新endTime時間欄位
內容寫在ListTableViewCell.swift
var todoList:[ToDoList] = []
override func viewDidLoad() {
super.viewDidLoad()
let realm = try! Realm()
todoList = Array(realm.objects(ToDoList.self).filter("status != 'deleted'"))
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section:
Int) -> Int {
return todoList.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath:
IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for:
indexPath) as! ListTableViewCell
let index = indexPath.row
let imageName = todoList[index].status == "\(Status.ongoing)" ? "Circle0" :
"Circle1"
cell.id = todoList[index].id
cell.contentLabel.text = todoList[index].content
cell.checkButton.setImage(UIImage(named: imageName), for: .normal)
// Configure the cell...
return cell
}
將cell轉型為自訂的『ListTableViewCell』型別
索引直接使用『indexPath.row』
如果Todo進行中就顯示『Circle0』圖檔,不然就顯示『Circle1』已完成
用『cell.contentLabel.text 』顯示頁面中,Label呈現的content內容
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let realm = try! Realm()
todoList =
Array(realm.objects(ToDoList.self).filter("status
!= 'deleted'"))
tableView.reloadData()
}
有點好笑的是一開始真的資料,與假資料設定的一樣,無法辨別。
因此將資料庫內的測試資料,最後面加上一個『*』號來區別
今天我們練習了,List頁面中資料的呈現,並且在新增Todo後,也能夠透過『viewDidAppear』事件,來重新讀取資料並呈現。目前還剩下編輯與刪除尚未實作,將會在明天的文章持續介紹。
此外發現Xcode11.1已經可以更新下載,為了避免之後文章發不出來(大誤),暫時不敢更新
今天的內容就到這邊,感謝讀者們的閱讀。
https://github.com/chiron-wang/IT30_11
深入淺出 iPhone 開發 (使用 Swift4) - WeiWei
https://www.udemy.com/course/iphone-swift4/
iOS 12 App 開發快速入門與實戰(繁體中文)
https://www.udemy.com/course/ios-12-app/
心智圖軟體Xmind
https://www.xmind.net/
[Realm]
[Swift] Realm.io 資料庫介紹 - 其之一:初探CRUD
https://ithelp.ithome.com.tw/articles/10183329
Auto increment ID in Realm, Swift 3.0
https://stackoverflow.com/questions/39579025/auto-increment-id-in-realm-swift-3-0
Realm Studio
https://realm.io/docs/swift/latest/#realm-studio