我有一个表格视图,我想使之响应。我有它使用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()
对其进行读取
关于ios - 数据源更新后未重新加载Rx表 View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47219629/