mirror of
https://github.com/Finb/Bark.git
synced 2025-12-08 21:36:01 +00:00
parent
2ff425921d
commit
a304c08216
@ -36,6 +36,8 @@ class MessageTableViewCell: BaseTableViewCell<MessageTableViewCellViewModel> {
|
||||
let label = UILabel()
|
||||
label.font = RobotoFont.medium(with: 11)
|
||||
label.textColor = BKColor.grey.base
|
||||
label.isUserInteractionEnabled = true
|
||||
label.addGestureRecognizer(UITapGestureRecognizer())
|
||||
return label
|
||||
}()
|
||||
|
||||
@ -56,7 +58,6 @@ class MessageTableViewCell: BaseTableViewCell<MessageTableViewCellViewModel> {
|
||||
contentView.addSubview(separatorLine)
|
||||
|
||||
layoutView()
|
||||
|
||||
}
|
||||
|
||||
@available(*, unavailable)
|
||||
@ -65,7 +66,6 @@ class MessageTableViewCell: BaseTableViewCell<MessageTableViewCellViewModel> {
|
||||
}
|
||||
|
||||
func layoutView() {
|
||||
|
||||
bodyLabel.snp.remakeConstraints { make in
|
||||
make.top.equalTo(16)
|
||||
make.left.equalTo(28)
|
||||
@ -128,6 +128,16 @@ class MessageTableViewCell: BaseTableViewCell<MessageTableViewCellViewModel> {
|
||||
|
||||
self.bodyLabel.attributedText = text
|
||||
}.disposed(by: rx.reuseBag)
|
||||
|
||||
model.date.bind(to: self.dateLabel.rx.text).disposed(by: rx.reuseBag)
|
||||
|
||||
// 切换时间显示样式
|
||||
dateLabel.gestureRecognizers?.first?.rx.event.subscribe(onNext: { _ in
|
||||
if model.dateStyle.value != .exact {
|
||||
model.dateStyle.accept(.exact)
|
||||
} else {
|
||||
model.dateStyle.accept(.relative)
|
||||
}
|
||||
}).disposed(by: rx.reuseBag)
|
||||
}
|
||||
}
|
||||
|
||||
@ -11,13 +11,22 @@ import Foundation
|
||||
import RxCocoa
|
||||
import RxDataSources
|
||||
|
||||
enum MessageListCellDateStyle {
|
||||
/// 相对时间,例如 1分钟前、1小时前
|
||||
case relative
|
||||
/// 精确时间,例如 2024-01-01 12:00
|
||||
case exact
|
||||
}
|
||||
|
||||
class MessageTableViewCellViewModel: ViewModel {
|
||||
let message: Message
|
||||
|
||||
let title: BehaviorRelay<String>
|
||||
let body: BehaviorRelay<String>
|
||||
let url: BehaviorRelay<String>
|
||||
let date: BehaviorRelay<String>
|
||||
|
||||
let date = BehaviorRelay<String>(value: "")
|
||||
var dateStyle = BehaviorRelay<MessageListCellDateStyle>(value: .relative)
|
||||
|
||||
init(message: Message) {
|
||||
self.message = message
|
||||
@ -25,9 +34,19 @@ class MessageTableViewCellViewModel: ViewModel {
|
||||
self.title = BehaviorRelay<String>(value: message.title ?? "")
|
||||
self.body = BehaviorRelay<String>(value: message.body ?? "")
|
||||
self.url = BehaviorRelay<String>(value: message.url ?? "")
|
||||
self.date = BehaviorRelay<String>(value: (message.createDate ?? Date()).agoFormatString())
|
||||
|
||||
super.init()
|
||||
|
||||
dateStyle.map { style in
|
||||
switch style {
|
||||
case .relative:
|
||||
return self.message.createDate?.agoFormatString() ?? ""
|
||||
case .exact:
|
||||
return self.message.createDate?.formatString(format: "yyyy-MM-dd HH:mm") ?? ""
|
||||
}
|
||||
}
|
||||
.bind(to: date)
|
||||
.disposed(by: rx.disposeBag)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user