Skip to content

Commit

Permalink
点击切换消息列表时间样式
Browse files Browse the repository at this point in the history
fix: #249
  • Loading branch information
Finb committed Sep 26, 2024
1 parent 2ff4259 commit a304c08
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 4 deletions.
14 changes: 12 additions & 2 deletions View/MessageTableViewCell.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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
}()

Expand All @@ -56,7 +58,6 @@ class MessageTableViewCell: BaseTableViewCell<MessageTableViewCellViewModel> {
contentView.addSubview(separatorLine)

layoutView()

}

@available(*, unavailable)
Expand All @@ -65,7 +66,6 @@ class MessageTableViewCell: BaseTableViewCell<MessageTableViewCellViewModel> {
}

func layoutView() {

bodyLabel.snp.remakeConstraints { make in
make.top.equalTo(16)
make.left.equalTo(28)
Expand Down Expand Up @@ -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)
}
}
23 changes: 21 additions & 2 deletions View/MessageTableViewCellViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,23 +11,42 @@ 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

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

Expand Down

0 comments on commit a304c08

Please sign in to comment.