當使用者點擊 "編輯" 時,會彈出一個包含文字輸入框的警告視窗,讓使用者修改訊息內容。修改完成後,會透過 Realm 資料庫進行更新,並重新載入表格顯示最新的內容。
// editMessage 是用來處理編輯訊息的動作
func editMessage(_ message: MessageBoard, at indexPath: IndexPath) {
// 彈出一個警告視窗,讓使用者可以編輯訊息內容
let alertController = UIAlertController(title: "編輯", message: nil, preferredStyle: .alert)
// 在警告視窗中加入一個文字輸入框,並將訊息的當前內容顯示在輸入框中
alertController.addTextField { textField in
textField.text = message.content
}
// 定義一個保存動作
let saveAction = UIAlertAction(title: "保存", style: .default) { [weak self] _ in
// 確認新的內容不為空,並從輸入框中取得新的內容
guard let newContent = alertController.textFields?.first?.text, !newContent.isEmpty else { return }
// 初始化 Realm 資料庫
let realm = try! Realm()
// 在 Realm 中寫入變更,更新訊息的內容和當前時間
try! realm.write {
message.content = newContent
message.currentTime = self?.getSystemTime() ?? ""
}
// 更新表格中的當前列,讓新的內容顯示出來
self?.tbvTest.reloadRows(at: [indexPath], with: .automatic)
// 將訊息重新排序並重新載入表格
self?.sortMessages()
self?.tbvTest.reloadData()
}
// 定義一個取消動作,取消操作不做任何變更
let cancelAction = UIAlertAction(title: "取消", style: .cancel, handler: nil)
// 將保存和取消的動作加入到警告視窗中
alertController.addAction(saveAction)
alertController.addAction(cancelAction)
// 顯示警告視窗
present(alertController, animated: true, completion: nil)
}
編輯過程中,我們透過 UITextField
讓使用者修改訊息,並將新的訊息內容寫入 Realm。編輯完成後,透過 reloadRows(at:with:)
來更新表格的顯示,並對訊息進行排序。
介紹了如何透過左右滑動來實現 UITableView
中的刪除與編輯功能,並與 Realm 資料庫進行整合。