簡體   English   中英

數據源更新后未重新加載Rx表視圖

[英]Rx table view not being reloaded after the datasource gets updated

我有一個表格視圖,我想使之響應。 我有它使用Swift的工作。

以下是RxSwift代碼

viewModel.getDetailMessages().asObservable().bind(to: messageTableView.rx.items){ tableView, row, element in
            let indexPath = IndexPath(row: row, section: 0)
            print("The size is", InboxData.sharedInstance.inboxdata[messageIndexPath.row].messageDetail.count)
            print("The size is element", element)
            if !element.isSender{
                let cell = tableView.dequeueReusableCell(withIdentifier: "recieverCell", for: indexPath) as! RecieverMessageTableViewCell
                cell.message.text = element.messageText
                cell.message.preferredMaxLayoutWidth = 287
                cell.message.layer.cornerRadius = 8
                cell.message.layer.masksToBounds = true
                return cell
            }else{
                let cell = tableView.dequeueReusableCell(withIdentifier: "senderCell", for: indexPath) as! SenderMessageTableViewCell
                cell.senderMessage.text = element.messageText
                cell.senderMessage.layer.cornerRadius = 8
                cell.senderMessage.preferredMaxLayoutWidth = 287
                cell.senderMessage.layer.masksToBounds = true
                return cell
            }
        }

以下是我的觀點模型

class MessagwViewModel{

    func getDetailMessages() -> Observable<[Message]> {
        return Observable.just(InboxData.sharedInstance.inboxdata[messageIndexPath.row].messageDetail)
    }

}

這是消息數據類

class MessageData {

    static let sharedInstance = MessageData()

    var message1 = Message(profilePicture: "Taylor Ward", artistName: "Taylor Ward", messageText: "Hi How are you?", isSender: true)

    var messages = [Message]()

    private init() {
        loadMessages()
    }

    func loadMessages() {
        messages.removeAll()
        messages.append(message1)

    }

}

在單擊按鈕時,我嘗試將數據追加到Message數組,如下所示

sendButton.rx.tap.bind{ value in
            InboxData.sharedInstance.inboxdata[messageIndexPath.row].messageDetail.append(Message(profilePicture: "", artistName: "", messageText: self.messageTextView.text, isSender: true))

       self.messageTableView.reloadData()
            self.messageTableView?.scrollToBottom()
            print("Button clicked")
        }

每當我添加一個新元素時,數組的計數就會增加。 但是,即使數據源具有最新值,表視圖也不會重新加載

任何人都可以指出問題所在嗎? 謝謝。

您的問題在MessagwViewModel Observable.just僅流出一個元素然后完成。 它不會監視對象的更改。 這個最簡單的解決方法(即hack)是使messageDetail成為Variable 您沒有顯示該變量的定義方式,但是基於它的調用方式,我假設它當前是這樣的: var messageDetail: [Message] 將其更改為let messageDetail: Variable<[Message]> 通過使用messageDetail.value = ...對其進行分配,並通過其Observable messageDetail.asObservable()對其進行讀取

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM