You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
155 lines
6.4 KiB
155 lines
6.4 KiB
![]()
2 years ago
|
//
|
||
|
// SedentaryViewController.swift
|
||
|
// Lookfit
|
||
|
//
|
||
|
// Created by lemo. on 2020/3/30.
|
||
|
// Copyright © 2020 Sheldon. All rights reserved.
|
||
|
//
|
||
|
|
||
|
import UIKit
|
||
|
|
||
|
// MARK:- 复用
|
||
|
private enum Resuable {
|
||
|
static let tableViewCell = ReusableCell<CommonTableViewCell>(nibName: "CommonTableViewCell")
|
||
|
static let doubleTimePickerCell = ReusableCell<DoubleTimePickerCell>(identifier: "DoubleTimePickerCell", nib: nil)
|
||
|
}
|
||
|
|
||
|
fileprivate struct Metric {
|
||
|
static let descTextColor = kHexColor(0x96A3B3)
|
||
|
}
|
||
|
|
||
|
class SedentaryViewController: TableViewController {
|
||
|
|
||
|
var sedentaryModel = SedentaryModel()
|
||
|
|
||
|
override func viewDidLoad() {
|
||
|
super.viewDidLoad()
|
||
|
monitor()
|
||
|
}
|
||
|
|
||
|
override func makeUI() {
|
||
|
super.makeUI()
|
||
|
let rightItem = UIBarButtonItem.baseBarButtonItem(normalImg: "", highImg: nil, title: MultiLanguageKey.save.localized, target: self, action: #selector(clickSave))
|
||
|
navigationItem.rightBarButtonItem = rightItem
|
||
|
tableViewStyle = .grouped
|
||
|
tableView.rx.setDelegate(self).disposed(by: rx.disposeBag)
|
||
|
tableView.register(Resuable.doubleTimePickerCell)
|
||
|
tableView.register(Resuable.tableViewCell)
|
||
|
tableView.snp.makeConstraints { (make) in
|
||
|
make.edges.equalToSuperview()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
override func bindViewModel() {
|
||
|
guard let viewModel = viewModel as? SedentaryViewModel else { return }
|
||
|
sedentaryModel = viewModel.sedentaryModel
|
||
|
let dataSource = RxTableViewSectionedReloadDataSource<MultipleSectionModel>.init(configureCell: { [weak self] (ds, tv, indexPath, _) -> UITableViewCell in
|
||
|
switch ds[indexPath] {
|
||
|
case .SinglePicker(_, _):
|
||
|
return UITableViewCell()
|
||
|
case .TableViewCellModel(let cellModel):
|
||
|
let cell: CommonTableViewCell = tv.dequeue(Resuable.tableViewCell, for: indexPath)
|
||
|
cell.bindViewModel(model: cellModel)
|
||
|
cell.rightSwitch.rx.isOn
|
||
|
.skip(1)
|
||
|
.subscribe(onNext: { (isOn) in
|
||
|
self?.sedentaryModel.IsOpen = isOn
|
||
|
})
|
||
|
.disposed(by: cell.cellDisposeBag)
|
||
|
return cell
|
||
|
case .DoubleTimePicker(let leftTitle, let rightTitle, let selectedItems):
|
||
|
let cell: DoubleTimePickerCell = tv.dequeue(Resuable.doubleTimePickerCell, for: indexPath)
|
||
|
cell.selectionStyle = .none
|
||
|
cell.begintimeLabel.text = leftTitle
|
||
|
cell.endtimeLabel.text = rightTitle
|
||
|
if indexPath.section == 2 {
|
||
|
cell.type = 1
|
||
|
}else {
|
||
|
cell.type = 0
|
||
|
}
|
||
|
cell.pickerColsure = { (items) in
|
||
|
if indexPath.section == 2 {
|
||
|
if let sittingTime = items.first {
|
||
|
self?.sedentaryModel.SittingTime = sittingTime
|
||
|
}
|
||
|
if let sittingThreshold = items.last {
|
||
|
self?.sedentaryModel.SittingThreshold = sittingThreshold
|
||
|
}
|
||
|
}else {
|
||
|
self?.sedentaryModel.StartHour = items.first?.components(separatedBy: ":").first ?? "00"
|
||
|
self?.sedentaryModel.EndHour = items.last?.components(separatedBy: ":").first ?? "00"
|
||
|
}
|
||
|
}
|
||
|
cell.selectedItems = selectedItems
|
||
|
return cell
|
||
|
}
|
||
|
})
|
||
|
viewModel.dataVariable
|
||
|
.bind(to: tableView.rx.items(dataSource: dataSource))
|
||
|
.disposed(by: rx.disposeBag)
|
||
|
tableView.rx.itemSelected
|
||
|
.filter { $0.section == 3 }
|
||
|
.subscribe(onNext: { [weak self] _ in
|
||
|
guard let `self` = self else { return }
|
||
|
let repeatVM = RepeatViewModel(cycle: self.sedentaryModel.Cycle)
|
||
|
repeatVM.updateCycle
|
||
|
.subscribe(onNext: { (cycleStr) in
|
||
|
guard let viewModel = self.viewModel as? SedentaryViewModel else { return }
|
||
|
self.sedentaryModel.Cycle = cycleStr
|
||
|
viewModel.loadData(model: self.sedentaryModel)
|
||
|
})
|
||
|
.disposed(by: repeatVM.rx.disposeBag)
|
||
|
self.navigator.show(segue: .repeatSet(viewModel: repeatVM), sender: self)
|
||
|
})
|
||
|
.disposed(by: rx.disposeBag)
|
||
|
}
|
||
|
|
||
|
@objc func clickSave() {
|
||
|
let startHour = (sedentaryModel.StartHour as NSString).integerValue
|
||
|
let endHour = (sedentaryModel.EndHour as NSString).integerValue
|
||
|
if startHour >= endHour {
|
||
|
SVProgressHUD.showError(withStatus: MultiLanguageKey.timeTip.localized)
|
||
|
return
|
||
|
}
|
||
|
SVProgressHUD.show()
|
||
|
if BluetoothService.shared.checkBleCmdEnable() {
|
||
|
BluetoothService.shared.setSedentaryWithBleCmdType(model: sedentaryModel)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func monitor() {
|
||
|
/// 指令成功失败监听
|
||
|
Observable.of(kNotificationCenter.rx.notification(Notification.Name(rawValue: CmdSuccess)),
|
||
|
kNotificationCenter.rx.notification(Notification.Name(rawValue: CmdTimeout)))
|
||
|
.merge()
|
||
|
.subscribe(onNext: { [weak self] notification in
|
||
|
guard let `self` = self, let cmd = notification.object as? BleCMD else { return }
|
||
|
let isSuccess = notification.name.rawValue == CmdSuccess
|
||
|
switch cmd {
|
||
|
case .setSedentary:
|
||
|
if isSuccess {
|
||
|
GlobalDeviceProfileModel.shareInstance.sedentaryModel = self.sedentaryModel
|
||
|
SVProgressHUD.showSuccess(withStatus: MultiLanguageKey.setSuccess.localized)
|
||
|
self.navigationController?.popViewController(animated: true)
|
||
|
return
|
||
|
}
|
||
|
SVProgressHUD.showSuccess(withStatus: MultiLanguageKey.setFail.localized)
|
||
|
default: break
|
||
|
}
|
||
|
})
|
||
|
.disposed(by: rx.disposeBag)
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
extension SedentaryViewController: UITableViewDelegate {
|
||
|
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
|
||
|
switch indexPath.section {
|
||
|
case 0: return kScaleHeight(50)
|
||
|
case 1: return kScaleHeight(178)
|
||
|
case 2: return kScaleHeight(184)
|
||
|
default: return kScaleHeight(50)
|
||
|
}
|
||
|
}
|
||
|
}
|