#14 to-do list 的完成打勾
Published in
3 min readAug 14, 2020
目的: 熟悉 table view cell 的重覆利用原理。
基本版:
1 在表格顯示待辦事項,想讀的書,想去玩的國家等,顯示的資料可先寫死在 array 裡。
2 利用點選 cell 顯示 / 取消打勾,當 cell 顯示打勾時表示已完成。請特別 注意表格上下捲動後,原本打勾的 cell 是否變沒打勾,原本沒打勾的 cell 是否變打勾。
進階版:
1 加入新增,修改,刪除功能。
(未實作)2 加入儲存功能,App 重新啟動後,可以看到之前的記錄和已完成的項目。
Debug流水帳:
1.我有新增todoTableViewCell.swift,在TodoListTableViewController.swift把資料todo傳進來然後執行cell.update(or edit/ finish edit),可是finish edit時需要把資料todo傳回去,試了好久都失敗
後來把 finish edit的func寫在TodoListTableViewController.swift就可以直接更新資料(需用座標算出indexPath.row)並且執行cell.update。(本來是寫在todoTableViewCell.swift需要回傳todo)
2.textField要enable Keyboard Key, IBAction用Did End On Exit鍵盤才會自動收起來
todoTableViewCell.swift func update(){
itemLabel.isHidden = false
editText.isHidden = true
itemLabel.text = todo.item
if todo.check{
accessoryType = .checkmark
}else{
accessoryType = .none
}
return
} @IBAction func editTodo(_ sender: Any) {
print("edit todo: \(todo.item)")
itemLabel.isHidden = true
editText.isHidden = false
editText.text = todo.item
}TodoListTableViewController.swift@IBAction func finishEditTextController(_ sender: UITextField) {
let point:CGPoint = sender.convert(.zero, to: tableView)
if let indexPath = tableView.indexPathForRow(at: point){
print("finish edit row \(indexPath.row)")
todoList[indexPath.row].item = sender.text!
tableView.reloadData()
}
}
GitHub: