[英]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.