123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353 |
- //
- // IHRoomPicker.swift
- // Inhealth
- //
- // Created by weclouds on 2020/3/4.
- // Copyright © 2020 weclouds. All rights reserved.
- //
- import UIKit
- import IBAnimatable
- enum TableViewType: Int { case build = 100, floor = 200, room = 300 }
- fileprivate let buildCellId = "buildCellId"
- fileprivate let floorCellId = "floorCellId"
- fileprivate let roomCellId = "roomCellId"
- class IHRoomPicker: AnimatableModalViewController {
-
- var shouldReset: Bool? = false
-
- var hotelId:String?{
- didSet{
- if let hotelId = self.hotelId{
- self.loadData(hotelId)
- }
-
- }
- }
-
- @IBOutlet weak var scrollViewHeightConstaint: NSLayoutConstraint!
- @IBOutlet weak var scrollView: UIScrollView!
- @IBOutlet weak var buildButton: UIButton!
- @IBOutlet weak var floorButton: UIButton!
- @IBOutlet weak var roomButton: UIButton!
- fileprivate var buttons :[UIButton] = []
- fileprivate var build_tb: UITableView?
- fileprivate var floor_tb: UITableView?
- fileprivate var room_tb: UITableView?
- fileprivate var builds: [DropDownData] = []
- fileprivate var floors: [DropDownData] = []
- fileprivate var rooms: [DropDownData] = []
- fileprivate var buildSelIndexPath: IndexPath?
- fileprivate var floorSelIndexPath: IndexPath?
- fileprivate var roomSeIndexPath: IndexPath?
-
- fileprivate var sel_build: String = "" {
- didSet {
- buildButton.setTitle(self.sel_build, for: UIControl.State.normal)
- floorButton.setTitle("please choose", for: UIControl.State.normal)
- roomButton.setTitle(nil, for: UIControl.State.normal)
- }
- }
-
- fileprivate var sel_floor: String = "" {
- didSet {
- floorButton.setTitle(self.sel_floor, for: UIControl.State.normal)
- roomButton.setTitle("please choose", for: UIControl.State.normal)
- }
- }
-
- fileprivate var sel_room: String = "" {
- didSet {
- roomButton.setTitle(self.sel_room, for: UIControl.State.normal)
- }
- }
- typealias RoomAction = (( _ build: String,_ floor: String,_ room: String, _ roomId:String) -> Void)?
-
- var selectedRoomCompleted: RoomAction = nil
-
-
-
- override func viewDidLoad() {
- super.viewDidLoad()
- setupUI()
-
- }
- @IBAction func dissButtonClicked(_ sender: Any) {
- dismiss()
- }
-
- fileprivate func dismiss() {
- self.dismiss(animated: true, completion: nil)
- guard let hotelID = self.hotelId else { return }
- self.reset(hotelID)
-
- }
-
- @IBAction func buildClick(_ sender: Any) {
- guard let hotelID = self.hotelId else { return }
- self.reset(hotelID)
- }
-
- @IBAction func floorClick(_ sender: Any) {
- if self.builds.count == 0 {
- return
- }
- floorButton.setTitle("please choose", for: UIControl.State.normal)
- roomButton.setTitle(nil, for: UIControl.State.normal)
-
- let build = self.builds.first
- self.sel_build = (build?.name!)!
- IHLoginService.share.getFloorList((build?.id!)!, requstSuccess: { (floorlist) in
- self.floors = floorlist
- self.scrollView.contentSize = CGSize(width: KSCREENWIDTH * 2, height: self.scrollViewHeight)
- self.floor_tb?.reloadData()
- self.scrollView.setContentOffset(CGPoint(x: KSCREENWIDTH, y: 0), animated: true)
- }) {
-
- }
- }
-
- @IBAction func roomClick(_ sender: Any) {
- if self.floors.count == 0{
- return
- }
- roomButton.setTitle("please choose", for: UIControl.State.normal)
- let floor = self.floors.first
- self.sel_floor = (floor?.name!)!
- IHLoginService.share.getRoomList((floor?.id!)!, requstSuccess: { (roomlist) in
-
- self.rooms = roomlist
- self.scrollView.contentSize = CGSize(width: KSCREENWIDTH * 3, height: self.scrollViewHeight)
- self.room_tb?.reloadData()
- self.scrollView.setContentOffset(CGPoint(x: KSCREENWIDTH * 2, y: 0), animated: true)
- }) {
-
- }
- }
- }
- extension IHRoomPicker{
- fileprivate func setupUI() {
- setupTalbeView()
- setupButtons()
- }
- fileprivate func setupTalbeView() {
- scrollView.delegate = self
- if #available(iOS 11.0, *) {
- scrollView.contentInsetAdjustmentBehavior = .never
- } else {
- self.automaticallyAdjustsScrollViewInsets = false
- }
-
- build_tb = factoryTableView(type: .build, cellIdentifier: buildCellId)
- scrollView.addSubview(build_tb!)
- floor_tb = factoryTableView(type: .floor, cellIdentifier: floorCellId)
- scrollView.addSubview(floor_tb!)
- room_tb = factoryTableView(type: .room, cellIdentifier: roomCellId)
- scrollView.addSubview(room_tb!)
- scrollView.isScrollEnabled = false
- scrollView.showsHorizontalScrollIndicator = false
- scrollView.showsVerticalScrollIndicator = false
- }
-
- fileprivate func setupButtons() {
- buildButton.isSelected = true
- buttons = [buildButton, floorButton, roomButton]
- _ = buttons.map {
- $0.setTitleColor(UIColor.darkGray, for: UIControl.State.normal)
- $0.setTitleColor(UIColor.black, for: UIControl.State.selected)
- }
- }
- }
- extension IHRoomPicker{
- fileprivate func loadData(_ hotelId:String) {
- IHLoginService.share.getBuildList(hotelId, requstSuccess: { (buildlist) in
- self.builds = buildlist
- self.build_tb?.reloadData()
-
- }) {
-
- }
-
- }
-
-
- fileprivate func reset(_ hotelId:String) {
- IHLoginService.share.getBuildList(hotelId, requstSuccess: { (buildlist) in
- self.builds = buildlist
- self.build_tb?.reloadData()
-
- self.scrollView.contentSize = CGSize(width: KSCREENWIDTH * 1, height: self.scrollViewHeight)
- self.scrollView.setContentOffset(CGPoint(x: 0, y: 0), animated: true)
- self.buildButton.setTitle("please choose", for: UIControl.State.normal)
- self.floorButton.setTitle(nil, for: UIControl.State.normal)
- self.roomButton.setTitle(nil, for: UIControl.State.normal)
- }) {
-
- }
-
- }
-
-
- }
- extension IHRoomPicker {
- var scrollViewHeight: CGFloat {
- return 225
- }
- var tbFrame: CGRect { return CGRect(x: 0, y: 0, width: KSCREENWIDTH, height: scrollViewHeight) }
- }
- extension IHRoomPicker{
- fileprivate func factoryTableView(type: TableViewType, cellIdentifier: String) -> UITableView {
- let tb = UITableView(frame: tbFrame, style: UITableView.Style.plain)
- tb.register(UINib.init(nibName: "IHSelectedRoomCell", bundle: nil), forCellReuseIdentifier: cellIdentifier)
- if #available(iOS 11.0, *) { tb.contentInsetAdjustmentBehavior = .never }
- else { self.automaticallyAdjustsScrollViewInsets = false }
- tb.separatorStyle = UITableViewCell.SeparatorStyle.none
- tb.tableHeaderView = UIView()
- tb.tableFooterView = UIView()
- tb.tag = type.rawValue
- tb.dataSource = self
- tb.delegate = self
- tb.rowHeight = 44
- var frame = tb.frame
- switch type {
- case .build: frame.origin.x = 0
- case .floor: frame.origin.x = KSCREENWIDTH
- case .room: frame.origin.x = KSCREENWIDTH * 2
- }
- tb.frame = frame
- return tb
- }
- }
- extension IHRoomPicker : UITableViewDataSource,UITableViewDelegate {
- func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
- return 44.0
- }
-
- func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
- let type = TableViewType(rawValue: tableView.tag)!
- switch type {
- case .build:
- return builds.count
- case .floor:
- return floors.count
- case .room:
- return rooms.count
- }
- }
-
- func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
-
- let type = TableViewType(rawValue: tableView.tag)!
- switch type {
-
- case .build:
- let cell = tableView.dequeueReusableCell(withIdentifier: buildCellId, for: indexPath) as! IHSelectedRoomCell
- cell.nameLabel?.text = builds[indexPath.row].name
-
- return cell
-
- case .floor:
- let cell = tableView.dequeueReusableCell(withIdentifier: floorCellId, for: indexPath) as! IHSelectedRoomCell
- cell.nameLabel?.text = floors[indexPath.row].name
-
- return cell
-
- case .room:
- let cell = tableView.dequeueReusableCell(withIdentifier: roomCellId, for: indexPath) as! IHSelectedRoomCell
-
- if rooms.count > 0 {
- cell.nameLabel?.text = rooms[indexPath.row].number
-
- }
- return cell
- }
- }
-
-
- func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
- let type = TableViewType(rawValue: tableView.tag)!
- switch type {
-
- case .build:
- if let buildSelIndexPath = buildSelIndexPath {
- if buildSelIndexPath != indexPath {
- floorSelIndexPath = nil
- roomSeIndexPath = nil
- }
- }
- buildSelIndexPath = indexPath
- self.sel_build = self.builds[indexPath.row].name!
- IHLoginService.share.getFloorList(self.builds[indexPath.row].id!, requstSuccess: { (floorlist) in
- self.floors = floorlist
- self.scrollView.contentSize = CGSize(width: KSCREENWIDTH * 2, height: self.scrollViewHeight)
- self.floor_tb?.reloadData()
- self.scrollView.setContentOffset(CGPoint(x: KSCREENWIDTH, y: 0), animated: true)
- }) {
-
- }
-
-
- case .floor:
- if let floorSelIndexPath = floorSelIndexPath {
- if floorSelIndexPath != indexPath { roomSeIndexPath = nil }
- }
- floorSelIndexPath = indexPath
- self.sel_floor = self.floors[indexPath.row].name!
- IHLoginService.share.getRoomList(self.floors[indexPath.row].id!, requstSuccess: { (roomlist) in
-
- self.rooms = roomlist
- // if self.rooms.count > 0 {
- self.scrollView.contentSize = CGSize(width: KSCREENWIDTH * 3, height: self.scrollViewHeight)
- self.room_tb?.reloadData()
- self.scrollView.setContentOffset(CGPoint(x: KSCREENWIDTH * 2, y: 0), animated: true)
- // } else {
- //
- // }
- }) {
-
- }
-
- case .room:
- roomSeIndexPath = indexPath
- sel_room = rooms[indexPath.row].number!
- log.debug("room - \(sel_room)")
- selectedRoomCompleted?(sel_build, sel_floor, sel_room,rooms[indexPath.row].id!)
- dismiss()
-
- }
- }
- }
- extension IHRoomPicker:UIScrollViewDelegate{
- func scrollViewDidScroll(_ scrollView: UIScrollView) {
- if scrollView.tag != 0 { return }
- _ = buttons.map { $0.isSelected = false }
- if scrollView.contentOffset.x == 0 { buildButton.isSelected = true }
- if scrollView.contentOffset.x == KSCREENWIDTH { floorButton.isSelected = true }
- if scrollView.contentOffset.x == KSCREENWIDTH * 2 { roomButton.isSelected = true }
- }
- }
- extension IHRoomPicker {
- override func updateViewConstraints() {
- super.updateViewConstraints()
- self.scrollViewHeightConstaint.constant = scrollViewHeight
- }
- }
|