// // HealthViewController.swift // FireBoltt // // Created by lemo. on 2020/3/7. // Copyright © 2020 Sheldon. All rights reserved. // import UIKit fileprivate enum Resuable { static let fbstepCell = ReusableCell() static let fbsleeoHeartRateCell = ReusableCell() static let fbtemperatureCell = ReusableCell() } class HealthViewController: TableViewController { lazy var navigationBar: HealthNavigationBar = { let navbar = HealthNavigationBar() navbar.gradient(colors: [kHexColor(0xFFF0DE), kHexColor(0xFFFFFF)], locations: nil, autoLaoutFrame: CGRect(x: 0, y: 0, width: kScreenW, height: kScaleWidth(90))) return navbar }() override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) } override func viewDidLoad() { super.viewDidLoad() // 未设置用户信息 guard let _ = UserDefaultsManagerFrieBoltt.getUserInfo() else { // 未设置用户信息 navigator.show(segue: .guideUserInfo, sender: self, transition: .modal) return } } override func makeUI() { super.makeUI() tableView.tableHeaderView = UIView() tableView.register(Resuable.fbstepCell) tableView.register(Resuable.fbsleeoHeartRateCell) tableView.register(Resuable.fbtemperatureCell) tableView.rx.setDelegate(self).disposed(by: rx.disposeBag) view.addSubview(navigationBar) layout() } func layout() { navigationBar.snp.makeConstraints { (make) in make.top.equalToSuperview() make.width.equalTo(kScreenW) make.height.equalTo(kBatteryH + 70) } tableView.snp.makeConstraints { (make) in make.top.equalTo(navigationBar.snp.bottom) make.left.right.bottom.equalToSuperview() } } override func bindViewModel() { guard let viewModel = viewModel as? HealthViewModels else { return } let rxDataSource = RxTableViewSectionedReloadDataSource(configureCell: { [weak self] (_ , tv, indexPath, model) -> UITableViewCell in switch model { case .stepItem(let viewModel): let cell = tv.dequeue(Resuable.fbstepCell, for: indexPath) cell.bind(model: viewModel) return cell case .sleepHeartItem(let viewModel): let cell = tv.dequeue(Resuable.fbsleeoHeartRateCell, for: indexPath) cell.bind(model: viewModel) cell.sleepBlockView.fb_bgImgBtn.rx.tap .subscribe(onNext: { _ in self?.navigator.show(segue: .sleep(viewModel: SleepViewModels()), sender: self) }) .disposed(by: cell.cellDisposeBag) cell.hearRateBlockView.fb_bgImgBtn.rx.tap .subscribe(onNext: { _ in self?.navigator.show(segue: .heartRate(viewModel: HRViewModels()), sender: self) }) .disposed(by: cell.cellDisposeBag) return cell case .temperatureIitem(let viewModel): let cell = tv.dequeue(Resuable.fbtemperatureCell, for: indexPath) cell.bind(model: viewModel) cell.temperatureBlockView.fb_bgImgBtn.rx.tap .subscribe(onNext: { _ in self?.navigator.show(segue: .temperature(viewModel: TemperatureViewModels()), sender: self) }) .disposed(by: cell.cellDisposeBag) return cell default: return UITableViewCell() } }) viewModel.userIcon .bind(to: navigationBar.fb_headImg.rx.image) .disposed(by: rx.disposeBag) viewModel.userNickname .bind(to: navigationBar.fb_nicknameLabel.rx.text) .disposed(by: rx.disposeBag) BluetoothService.shared.deviceConnectState .bind(to: navigationBar.fb_statusBtn.rx.isSelected) .disposed(by: rx.disposeBag) BluetoothService.shared.powerState .bind(to: navigationBar.fb_powerBtn.rx.image()) .disposed(by: rx.disposeBag) viewModel.relay .bind(to: tableView.rx.items(dataSource: rxDataSource)) .disposed(by: rx.disposeBag) // DFU设备升级 viewModel.dfuDeviceUpgrate .subscribe(onNext: { [weak self] viewModel in guard let `self` = self else { return } if let currenVC = currentViewController(), currenVC.isKind(of: FirmwareUpdateViewControllers.self) { return } currentTabbarController()?.selectedIndex = 0 self.navigator.show(segue: .firmwareUpdate(viewModel: viewModel), sender: self) }) .disposed(by: rx.disposeBag) } override func handleEvent() { navigationBar.rx.tap .subscribe(onNext: { [weak self] _ in let viewModel = UserInfoViewModel() self?.navigator.show(segue: .userInfo(viewModel: viewModel), sender: self) }) .disposed(by: rx.disposeBag) tableView.rx.itemSelected .subscribe(onNext: { [weak self] (indexPath) in if indexPath.row == 0 { let viewModel = StepViewModels() self?.navigator.show(segue: .step(viewModel: viewModel), sender: self) } }) .disposed(by: rx.disposeBag) } } extension HealthViewController: UITableViewDelegate { func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { if indexPath.row == 0 { return kScaleWidth(215) } return kScaleWidth(224) } }