// // IHNewRoomView.swift // Inhealth // // Created by weclouds on 2019/12/13. // Copyright © 2019 weclouds. All rights reserved. // import UIKit protocol IHNewRoomViewDelegate : NSObjectProtocol { func selectedPhoto() func addNewEquipmentInNewRoom() func selectedFloorInNewRoom() func selectedModeInNewRoom() func preserveInNewRoom(_ roomInfo:NewRoomInfo?,error:IHNewRoomViewEditError) func popController(with roomInfo:NewRoomInfo?,error:IHNewRoomViewEditError) } let kNotifactionIHNewRoomViewUploadImageFinished = "kNotifactionIHNewRoomViewUploadImageFinished" let kNotificationIHNewRoomViewGetRoomImage = "kNotificationIHNewRoomViewGetRoomImage" class IHNewRoomView: UIView { @IBOutlet weak var imageBox: UIImageView! @IBOutlet weak var uploadImage: UIImageView! weak var delegate : IHNewRoomViewDelegate? var isBeginEdit:Bool?{ return judgeIsBeginEditContent() } var isEditFloor :Bool? = false var isPickImageFinished:Bool? = false var imagePath :String? var floorList:[RoomListData]?{ didSet{ if let floorList = self.floorList { floorNames = IHCentrlizedService.share.getFloorNameList(from: floorList) floorNameLabel.text = floorNames?.first if floorNames != nil || floorNames!.count > 0 { floorNameLabel.reset() let firstFloor = floorList.first floorId = firstFloor?.id }else{ floorNameLabel.isEmpty("Please chose Floor") } } } } var roomInfo:NewRoomInfo?{ didSet{ if let info = self.roomInfo { self.fillRoomInfoToView(info) }else{ self.clearRoomInfo() } } } var floorNames :[String]? var equipmentArr : [EquipmentInfo]?{ didSet{ self.tableView.reloadData() } } @IBOutlet weak var tableView: UITableView! @IBOutlet weak var floorBox: UIView! @IBOutlet weak var scenceBox: UIView! @IBOutlet weak var floorNameLabel: UILabel! @IBOutlet weak var roomNumbelTf: UITextField! @IBOutlet weak var scenceModeLabel: UILabel! @IBOutlet weak var snTestfiled: UITextField! var floorId :String? override func awakeFromNib() { super.awakeFromNib() createUI() NotificationCenter.default.addObserver(self, selector: #selector(notifyRoomIcon), name: NSNotification.Name(kNotificationIHNewRoomViewGetRoomImage), object: nil) NotificationCenter.default.addObserver(self, selector: #selector(notifyImagePath), name: NSNotification.Name(kNotifactionIHNewRoomViewUploadImageFinished), object: nil) } func fillRoomInfoToView(_ info:NewRoomInfo) { if let image = info.pickImage,let floor = info.floorName,let number = info.number ,let sn = info.sn,let equipments = info.deviceList{ self.snTestfiled.text = sn self.roomNumbelTf.text = number self.floorNameLabel.text = floor self.imageBox.image = image self.equipmentArr = equipments } } func clearRoomInfo() { self.snTestfiled.text = "" self.roomNumbelTf.text = "" self.floorNameLabel.text = floorNames?.first self.imageBox.image = UIImage(named: "New room") self.equipmentArr = nil } func createUI() { self.tableView.dataSource = self self.tableView.delegate = self self.tableView.separatorStyle = .none self.tableView.register(UINib(nibName: "IHNewEquipment_nr_Cell", bundle: nil), forCellReuseIdentifier: "cell") floorBox.isUserInteractionEnabled = true scenceBox.isUserInteractionEnabled = true let floorTap = UITapGestureRecognizer(target: self, action: #selector(selectedFloor)) floorBox.addGestureRecognizer(floorTap) let scenceTap = UITapGestureRecognizer(target: self, action: #selector(selectedMode)) scenceBox.addGestureRecognizer(scenceTap) let tapImageV = UITapGestureRecognizer(target: self, action: #selector(tapRoomImage)) let tapImageV2 = UITapGestureRecognizer(target: self, action: #selector(tapRoomImage)) imageBox.addGestureRecognizer(tapImageV) uploadImage.addGestureRecognizer(tapImageV2) imageBox.contentMode = .scaleAspectFill } deinit { NotificationCenter.default.removeObserver(self) } @objc func notifyRoomIcon(_ notif:Notification) { let image = notif.object as! UIImage self.imageBox.image = image } @objc func notifyImagePath(_ notif:Notification) { let path = notif.object as! String isPickImageFinished = true self.imagePath = path } @objc func tapRoomImage(){ if let delegate = self.delegate { delegate.selectedPhoto() } } @IBAction func addNewEquipmentAction(_ sender: Any) { if let delegate = self.delegate { delegate.addNewEquipmentInNewRoom() } } @IBAction func preserveActioon(_ sender: Any) { let data = getEditData() if let delegate = self.delegate { delegate.preserveInNewRoom(data.info, error: data.error) } } func shouldPop() { let data = getEditData() if let delegate = self.delegate { delegate.popController(with: data.info, error: data.error) //delegate.preserveInNewRoom(info, error: error) } } func getEditData() ->(info : NewRoomInfo,error: IHNewRoomViewEditError) { var info = NewRoomInfo() var error = IHNewRoomViewEditError.success if Intermediate.isSaveRoomInfo == "1" { error = .success info.deviceList = self.equipmentArr info.floorId = self.floorId info.floorName = self.floorNameLabel.text info.sn = snTestfiled.text info.image = imagePath info.number = self.roomNumbelTf.text info.pickImage = imageBox.image return (info,error) } //判断输入 // && self.equipmentArr?.count != 0 if isPickImageFinished == true && self.roomNumbelTf.text != "" && self.snTestfiled.text != ""{ error = .success info.deviceList = self.equipmentArr info.floorId = self.floorId info.floorName = self.floorNameLabel.text info.sn = snTestfiled.text info.image = imagePath info.number = self.roomNumbelTf.text info.pickImage = imageBox.image } // if self.equipmentArr?.count == 0 { // error = .lackEquipment // } if self.snTestfiled.text == "" && self.roomNumbelTf.text == nil { error = .lackSN } if self.roomNumbelTf.text == "" || self.roomNumbelTf.text == nil || self.roomNumbelTf.text?.isBlanck == true { error = .lackRoomName } if isPickImageFinished == false{ error = .lackImage } return (info,error) } } extension IHNewRoomView :UITableViewDelegate,UITableViewDataSource{ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.equipmentArr?.count ?? 0 } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! IHNewEquipment_nr_Cell cell.selectionStyle = .none let info = equipmentArr![indexPath.row] cell.deviceInfo = info cell.deleteCallback = { [unowned self] in //删除操作 self.deleteEquipment(indexPath: indexPath) } return cell } func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 70 } } /// - Private Method extension IHNewRoomView{ /// 判断是否开始编辑内容 /// /// - Returns : true :开始编辑, false : 没有编辑 func judgeIsBeginEditContent() -> Bool { var _isEditEquipment = false let _isEditFloor = self.isEditFloor var _isEditRoomName = false let isPickImage = isPickImageFinished var _isEditSN = false if self.equipmentArr!.count > 0 { _isEditEquipment = true }else{ _isEditEquipment = false } if roomNumbelTf.text != "" { _isEditRoomName = true }else{ _isEditRoomName = false } if snTestfiled.text != "" { _isEditSN = true }else{ _isEditSN = false } //只要有一项开始编辑,就是已经开始编辑了 if _isEditEquipment == true || _isEditFloor == true || _isEditRoomName == true || _isEditSN == true || isPickImage == true { return true } return false } func deleteEquipment(indexPath:IndexPath) { //删除数据 self.equipmentArr?.remove(at: indexPath.row) } @objc func selectedFloor() { if self.floorNames == nil || self.floorNames?.count == 0 { g_showHUD("这酒店没有楼层") return } let titleArr = self.floorNames let pick = THScrollChooseView(question: titleArr, withDefaultDesc: titleArr?.first) pick?.confirmBlock = {(selectedIndex) in log.debug(" title = \(titleArr?[selectedIndex])") let floor = self.floorList?[selectedIndex] self.floorNameLabel.text = floor?.name if self.floorNames != nil || self.floorNames!.count > 0 { self.floorNameLabel.reset() let floor = self.floorList?[selectedIndex] self.floorId = floor?.id self.isEditFloor = true }else{ self.floorNameLabel.isEmpty("Please chose Floor") } } pick?.show() if let delegate = self.delegate { delegate.selectedFloorInNewRoom() } } @objc func selectedMode() { let titleArr = ["Custom mode","Reading mode","Full-on mode","Sleep mode","Relax mode","Work mode"] let pick = THScrollChooseView(question: titleArr, withDefaultDesc: titleArr.first) pick?.confirmBlock = {(selectedIndex) in log.debug(" title = \(titleArr[selectedIndex])") self.scenceModeLabel.text = titleArr[selectedIndex] } pick?.show() if let delegate = self.delegate { delegate.selectedModeInNewRoom() } } }