iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
Mobile Development

IOS的打怪升級之路系列 第 21

鐵人賽第二十一天 留言板(七)送出留言的功能製作 (完成留言板)

  • 分享至 

  • xImage
  •  

說明

在這一篇中,我們將實作留言板的送出留言功能,包含新增與編輯留言的邏輯。使用者可以透過此功能將他們的留言送出,並且在需要時編輯已存在的留言,讓留言板的操作更加完整。/images/emoticon/emoticon13.gif

實作

送出留言

@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()
}

結語

通過這些程式碼,我們完成了留言板的送出留言功能,包含新增和編輯留言的邏輯。使用者能夠隨時將自己的留言送出,並對已存在的留言進行編輯。這使得留言板的功能更加完整。/images/emoticon/emoticon07.gif


上一篇
鐵人賽第二十天 留言板(六)tableview的左滑功能(編輯)
下一篇
鐵人賽第二十二天 天氣API(ㄧ)取得授權碼與API的選擇
系列文
IOS的打怪升級之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言