在這一篇中,我們將實作留言板的送出留言功能,包含新增與編輯留言的邏輯。使用者可以透過此功能將他們的留言送出,並且在需要時編輯已存在的留言,讓留言板的操作更加完整。
@IBAction func sendmes(_ sender: Any) {
// 呼叫送出留言的方法
sendm()
// 呼叫排序方法,更新留言順序
sor()
// 更新按鈕的標題
btnsend.setTitle("send", for: .normal)
// 重設編輯狀態
isedit = false
}
func sendm() {
// 如果進入編輯模式
if (isedit) {
let mydata = data()
// 更新名稱
if let name = txfperson.text, !name.isEmpty {
mydata.name = name
}
// 更新留言內容
if let say = txvsay.text, !say.isEmpty {
mydata.say = say
}
// 設定當前時間
mydata.time = Date()
let realm = try! Realm()
let dogToEdit = realm.objects(data.self)[editrow] // 取得需要編輯的資料
// 開始寫入 Realm
try! realm.write {
dataToEdit.name = mydata.name
dataToEdit.say = mydata.say
dataToEdit.time = mydata.time
}
} else {
// 如果是新增留言
let myDog = data()
// 設定名稱
if let name = txfperson.text, !name.isEmpty {
myDog.name = name
}
// 設定留言內容
if let say = txvsay.text, !say.isEmpty {
myDog.say = say
}
// 設定當前時間
myDog.time = Date()
let realm = try! Realm()
// 計算新的 numbers 值
if let maxNumber = realm.objects(dog.self).max(ofProperty: "numbers") as Int? {
myDog.numbers = maxNumber + 1
} else {
// 預設為1
myDog.numbers = 1
}
// 儲存 Dog 對象
try! realm.write {
realm.add(myDog)
}
}
}
func send() {
let realm = try! Realm()
let todos = realm.objects(dog.self)
// 進入編輯模式時,將目前的資料填入輸入框
txfperson.text = todos[editrow].name
txvsay.text = todos[editrow].say
btnsend.setTitle("edit", for: .normal) // 更新按鈕標題為 "edit"
}
func sor() {
let realm = try! Realm()
// 根據時間排序資料
table = Array(realm.objects(dog.self).sorted(byKeyPath: "time", ascending: isAscending))
// 重新加載表格視圖
tbvsee.reloadData()
}
通過這些程式碼,我們完成了留言板的送出留言功能,包含新增和編輯留言的邏輯。使用者能夠隨時將自己的留言送出,並對已存在的留言進行編輯。這使得留言板的功能更加完整。