Keine Beschreibung

MessageViewController.swift 3.8KB

    // // MessageViewController.swift // PaiAi // // Created by mac on 16/5/13. // Copyright © 2016年 FFIB. All rights reserved. // import UIKit import RxSwift import RxCocoa import RxDataSources protocol MessageViewControllerDelegate: class { func didSelect(item: MessageItem) } final class MessageViewController: UIViewController { // MARK: Storyboard property @IBOutlet var tableView: UITableView! var emptyView : UILabel = { let empty = UILabel(frame: CGRect(x: kScreenWidth / 2 - 50, y: 74, width: 50, height: 50)) empty.isHidden = true empty.text = "当前没有任何消息" empty.textColor = UIColor.gray empty.font = UIFont.systemFont(ofSize: 14) empty.sizeToFit() return empty }() // MARK: data property var messageViewModel: MessageViewModel? = nil let disposeBag = DisposeBag() weak var delegate: MessageViewControllerDelegate? // MARK: parameter property var type = MessageType.zan { willSet { messageViewModel = MessageViewModel(type: newValue) } } // MARK: view function override func viewDidLoad() { super.viewDidLoad() configureRxDataSource() messageViewModel?.reload(isRefresh: true) view.addSubview(emptyView) } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(true) // titleWithbackBar = messageViewModel?.messageType.model.title ?? "" navigationItem.setRightBars(buttonSpace: 0, images: [UIImage(named: "更多-右上角-1")], actions: [#selector(clearMessages)], target: self) } var dataSource: RxTableViewSectionedAnimatedDataSource<AnimatableSectionModel<Int, MessageItem>> { return RxTableViewSectionedAnimatedDataSource<AnimatableSectionModel<Int, MessageItem>>(configureCell: { (dataSource, tableView, indexPath, item) in switch self.type { case .system: let cell = tableView.dequeueReusableCell(withIdentifier: "messageCell", for: indexPath) as! MessageCell cell.setInfo(item) return cell case .comment, .zan: let cell = tableView.dequeueReusableCell(withIdentifier: "commentCell", for: indexPath) as! CommentCell cell.setInfo(item, type: self.type) return cell } }, canEditRowAtIndexPath: { _, _ in true }) } func configureRxDataSource() { messageViewModel?.hasData .bind(to: emptyView.rx.isHidden) .disposed(by: disposeBag) messageViewModel?.messageContents .bind(to: tableView.rx.items(dataSource: dataSource)) .disposed(by: disposeBag) tableView.rx.modelDeleted(MessageItem.self) .subscribe(onNext: { [unowned self] in self.messageViewModel?.remove($0)}) .disposed(by: disposeBag) tableView.rx.modelSelected(MessageItem.self) .subscribe(onNext: { [unowned self] in self.delegate?.didSelect(item: $0) }) .disposed(by: disposeBag) tableView.rx.willDisplayCell .subscribe({ [unowned self] in self.messageViewModel?.preload(indexPath: $0.element?.indexPath)}) .disposed(by: disposeBag) } // MARK: button function @objc func clearMessages() { let alert = FFAlertController(title: "", message: "", alertStyle: .actionSheet) alert.addAlertAction(alertAction: DestructiveAlertAction(title: "清空消息", handler: { (alertAction) in self.messageViewModel?.removeAll() })) alert.addAlertAction(alertAction: FFAlertAction(title: "取消", handler: nil)) presentController(alert) } }