// // FF_HeadCell.swift // SolarLamp // // Created by liaolj on 16/12/24. // Copyright © 2016年 SolarLamp. All rights reserved. import UIKit import Reusable import RxCocoa import RxSwift import BarcodeScanner import MapKit extension FF_HeadCell: UITextFieldDelegate { func textFieldDidEndEditing(_ textField: UITextField) { let content = textField.text switch textField { case lamp_no: self.targetVC?.rawSettingData["lamp_no"] = content case section: self.targetVC?.rawSettingData["section"] = content case address: self.targetVC?.rawSettingData["address"] = content case latitude: self.targetVC?.rawSettingData["latitude"] = content default: break } } } class FF_HeadCell: UITableViewCell, NibReusable { // typealias coordinationCallBack = ((CLLocationCoordinate2D)->())? // var callBack:((CLLocationCoordinate2D)->())? @IBOutlet weak var network_name:UITextField! @IBOutlet weak var lamp_no:UITextField! @IBOutlet weak var section:UITextField! @IBOutlet weak var address:UITextField! @IBOutlet weak var latitude:UITextField! @IBOutlet weak var longitude:UITextField! @IBOutlet weak var netSelectBox: UIView!//wirelessIDAction @IBOutlet weak var autoLocationButton: KKWButton! @IBOutlet weak var mapSelectBox: KKWView! @IBOutlet weak var wirelessIDBox: UIView!//wirelessIDAction @IBOutlet weak var devicetypeLabel: UILabel! //label text @IBOutlet weak var devicetypeTextfield: UITextField! @IBOutlet weak var devicetypeSelectedView: UIView! @IBOutlet weak var lampprotocoltypeLabel: UILabel! @IBOutlet weak var lampprotocoltypeTextfield: UITextField! @IBOutlet weak var lampprotocoltypeSelectedView: UIView! @IBOutlet weak var netword_nameLabel: UILabel! var devicetype : Int? var lampprotocoltype : Int? var protocoltype: Int? var isDirectConnection : Bool? = false{ didSet{ if self.isDirectConnection! { self.network_name.placeholder = "network_ownPlaceholder".localizedstr() self.netword_nameLabel.text = "protocoltype".localizedstr() self.network_name.text = "" } else { self.network_name.placeholder = "network_ownPlaceholder".localizedstr() self.netword_nameLabel.text = "network_own".localizedstr() self.network_name.text = "" } } } weak var targetVC:DlightDetailEditTVC? { didSet { dataInit() } } @IBOutlet weak var pickeImageView:UIImageView! override func awakeFromNib() { super.awakeFromNib() // setupRx() setupNormal() // Initialization code } func setupNormal() { lamp_no.delegate = self section.delegate = self address.delegate = self latitude.delegate = self network_name.isEnabled = false devicetypeTextfield.isEnabled = false lampprotocoltypeTextfield.isEnabled = false devicetypeLabel.text = "devicetype".localizedstr() devicetypeTextfield.placeholder = "devicetypePlaceholder".localizedstr() lampprotocoltypeLabel.text = "lampprotocoltype".localizedstr() lampprotocoltypeTextfield.placeholder = "lampprotocoltypePlaceholder".localizedstr() devicetypeSelectedView.isUserInteractionEnabled = true lampprotocoltypeSelectedView.isUserInteractionEnabled = true let devicetypeSelectBoxTapGesture = UITapGestureRecognizer(target: self, action: #selector(FF_HeadCell.devicetypeSeletedAction)) let lampprotocoltypeSelectBoxTapGesture = UITapGestureRecognizer(target: self, action: #selector(FF_HeadCell.lampprotocoltypeSelectedAction)) devicetypeSelectedView.addGestureRecognizer(devicetypeSelectBoxTapGesture) lampprotocoltypeSelectedView.addGestureRecognizer(lampprotocoltypeSelectBoxTapGesture) let netSelectBoxTapGesture = UITapGestureRecognizer.init(target: self, action: #selector(FF_HeadCell.netSelectBoxAction)) netSelectBox.addGestureRecognizer(netSelectBoxTapGesture) autoLocationButton.addTarget(self, action: #selector(FF_HeadCell.autoLocationButtonAction), for: UIControlEvents.touchUpInside) let mapSelectBoxTapGesture = UITapGestureRecognizer.init(target: self, action: #selector(FF_HeadCell.mapSelectBoxAction)) mapSelectBox.addGestureRecognizer(mapSelectBoxTapGesture) let wirelessIDBoxTapGesture = UITapGestureRecognizer.init(target: self, action: #selector(FF_HeadCell.wirelessIDBoxAction)) wirelessIDBox.addGestureRecognizer(wirelessIDBoxTapGesture) } @objc func devicetypeSeletedAction(tap:UITapGestureRecognizer) { log.debug("设备类型选择") let deviceTypes = ["直连设备","非直连设备"] let deviceTypePick = THScrollChooseView(question: deviceTypes, withDefaultDesc:"非直连设备") deviceTypePick!.show() deviceTypePick?.confirmBlock = {[weak self](selectedIndex) in log.debug(deviceTypes[selectedIndex]) self?.devicetypeTextfield.text = deviceTypes[selectedIndex] if selectedIndex == 0 { self?.isDirectConnection = true self?.devicetype = 1 self?.targetVC?.devicetype = 1 self?.targetVC?.rawSettingData["devicetype"] = "1" }else{ self?.isDirectConnection = false self?.devicetype = 0 self?.targetVC?.devicetype = 0 self?.targetVC?.rawSettingData["devicetype"] = "0" } } } @objc func lampprotocoltypeSelectedAction(tap:UITapGestureRecognizer) { log.debug("灯控协议类型选择") let lampprotocoltypes = ["LightBus","ModBus"] let lampprotocoltypesPick = THScrollChooseView(question: lampprotocoltypes, withDefaultDesc:"LightBus") lampprotocoltypesPick!.show() lampprotocoltypesPick?.confirmBlock = {[weak self](selectedIndex) in log.debug(lampprotocoltypes[selectedIndex]) self?.lampprotocoltypeTextfield.text = lampprotocoltypes[selectedIndex] self?.lampprotocoltype = selectedIndex self?.targetVC?.lampprotocoltype = selectedIndex self?.targetVC?.rawSettingData["lampprotocoltype"] = "\(selectedIndex)" } } @objc func netSelectBoxAction(tap: UITapGestureRecognizer) { if isDirectConnection! { log.debug("选择网络协议类型") let netAgreementTypes = ["tcp","nb","gprs","lorawan"] let netAgreementTypePick = THScrollChooseView(question: netAgreementTypes, withDefaultDesc:nil) netAgreementTypePick!.show() netAgreementTypePick?.confirmBlock = {[weak self](selectedIndex) in log.debug(netAgreementTypes[selectedIndex]) self?.network_name.text = netAgreementTypes[selectedIndex] self?.protocoltype = selectedIndex self?.targetVC?.protocoltype = selectedIndex self?.targetVC?.rawSettingData["protocoltype"] = "\(selectedIndex)" } } else { let vc = KKWMainVCType.KKWNetworkSelectVC.getClass() as! KKWNetworkSelectVC vc.project_id = self.targetVC?.project_id vc.dismissCallBack = { [weak self] network in self?.targetVC?.selectNetwork = network } self.targetVC?.navigationController?.pushViewController(vc, animated: false) } } @objc func autoLocationButtonAction(sender: UIButton) { KKWLocationService.shareInstance.callBack = { [weak self] coordinate in self?.coordinate = coordinate } KKWLocationService.shareInstance.start() } @objc func mapSelectBoxAction(tap: UITapGestureRecognizer) { let vc = KKWDeviceRootVCType.fetchMap.getClass() as! DMapFetchLocationVC vc.coordinationCallBack = { [weak self]coordinate in self?.coordinate = coordinate } self.targetVC?.navigationController?.pushViewController(vc, animated: false) } @objc func wirelessIDBoxAction(tap: UITapGestureRecognizer) { let controller = BarcodeScannerViewController() controller.codeDelegate = self controller.errorDelegate = self controller.dismissalDelegate = self self.targetVC?.present(controller, animated: true, completion: nil) } /* 0110e00200244800c8000c000b008e008d0096008c008c0096008c0096008c0091000000000005000a000f00080008000800080008003c000a003c000a00000000000f00080000000a0001000500e4e8ee */ func setupRx() { lamp_no.rx.text.subscribe(onNext: { [weak self](content) in self?.targetVC?.rawSettingData["lamp_no"] = content }).addDisposableTo(disposeBag) section.rx.text.subscribe(onNext: { [weak self](content) in self?.targetVC?.rawSettingData["section"] = content }).disposed(by: disposeBag) address.rx.text.subscribe(onNext: { [weak self](content) in self?.targetVC?.rawSettingData["address"] = content }).disposed(by: disposeBag) latitude.rx.text.subscribe(onNext: { [weak self](content) in let con = Double(content!) let lat = con! + 0.006 self?.targetVC?.rawSettingData["latitude"] = content }).disposed(by: disposeBag) longitude.rx.text.subscribe(onNext: { [weak self](content) in let con2 = Double(content!) //string 转double let lng = con2! + 0.0065 self?.targetVC?.rawSettingData["longitude"] = content }).disposed(by: disposeBag) //netSelectBox.rx.gesture(RxGestureTypeOption.tap).subscribe(onNext:{}).addDisposableTo(rx_disposeBag) netSelectBox.rx.gesture(RxGestureTypeOption.tap).subscribe(onNext: { [weak self]_ in let vc = KKWMainVCType.KKWNetworkSelectVC.getClass() as! KKWNetworkSelectVC vc.project_id = self?.targetVC?.project_id vc.dismissCallBack = { network in self?.targetVC?.selectNetwork = network } self?.targetVC?.navigationController?.pushViewController(vc, animated: false) }).disposed(by: disposeBag) autoLocationButton.rx.tap.subscribe(onNext: { [weak self]_ in KKWLocationService.shareInstance.callBack = { coordinate in self?.coordinate = coordinate } KKWLocationService.shareInstance.start() }).addDisposableTo(disposeBag) mapSelectBox.rx.gesture(RxGestureTypeOption.tap).subscribe(onNext: { [weak self] _ in let vc = KKWDeviceRootVCType.fetchMap.getClass() as! DMapFetchLocationVC vc.coordinationCallBack = { coordinate in self?.coordinate = coordinate } self?.targetVC?.navigationController?.pushViewController(vc, animated: false) }).addDisposableTo(disposeBag) //wirelessIDBox wirelessIDBox.rx.gesture(RxGestureTypeOption.tap).subscribe(onNext: { [weak self] _ in let controller = BarcodeScannerViewController() controller.codeDelegate = self controller.errorDelegate = self controller.dismissalDelegate = self self?.targetVC?.present(controller, animated: true, completion: nil) // self?.targetVC?.navigationController?.pushViewController(vc, animated: false) }).disposed(by: disposeBag)//wirelessIDBox } var coordinate:CLLocationCoordinate2D! { didSet { //高德地图坐标 let lat = String(format: "%.6f", coordinate.latitude + 0.006 ) let lng = String(format: "%.6f", coordinate.longitude + 0.0065) let geoArr = geoExchangeBDGeoWith(lat: coordinate.latitude, lng: coordinate.longitude) log.debug("直接+ lat: \(lat),lng:\(lng) 进一步处理 \(geoArr[0]),\(geoArr[1])") targetVC?.rawSettingData["latitude"] = geoArr[0] targetVC?.rawSettingData["longitude"] = geoArr[1] } } func dataInit() { //设备类型 let devicetypeInt = targetVC?.rawSettingData["devicetype"] var devicetypeStr1 : String? if devicetypeInt == "1" { devicetypeStr1 = "direct_device".localizedstr() }else{ devicetypeStr1 = "indirce_device".localizedstr() } devicetypeTextfield.text = devicetypeStr1 //协议类型 let lampprotocoltypeInt = self.targetVC?.rawSettingData["lampprotocoltype"] var lampprotocoltypeStr : String? if lampprotocoltypeInt == "0" { lampprotocoltypeStr = "LightBus" }else{ lampprotocoltypeStr = "ModBus" } lampprotocoltypeTextfield.text = lampprotocoltypeStr let protocoltypeInt = targetVC?.rawSettingData["protocoltype"] var protocoltypeStr : String? if protocoltypeInt == "0" { protocoltypeStr = "tcp" }else if protocoltypeInt == "1"{ protocoltypeStr = "nb" }else if protocoltypeInt == "2"{ protocoltypeStr = "gprs" }else if protocoltypeInt == "3"{ protocoltypeStr = "lorawan" } self.targetVC?.devicetype = Int(devicetypeInt!) self.targetVC?.lampprotocoltype = Int(lampprotocoltypeInt!) self.targetVC?.protocoltype = Int(protocoltypeInt!) if devicetypeInt == "1"{ devicetype = 1 isDirectConnection = true network_name.text = protocoltypeStr }else{ network_name.text = targetVC?.rawSettingData["network_name"] isDirectConnection = false devicetype = 0 } lamp_no.text = targetVC?.rawSettingData["lamp_no"] section.text = targetVC?.rawSettingData["section"] address.text = targetVC?.rawSettingData["address"] //这个是 latitude.text = targetVC?.rawSettingData["latitude"] longitude.text = targetVC?.rawSettingData["longitude"] } override func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) // Configure the view for the selected state } } extension FF_HeadCell: BarcodeScannerCodeDelegate { func scanner(_ controller: BarcodeScannerViewController, didCaptureCode code: String, type: String) { // print(code) // print(type) self.address.text = code controller.dismiss(animated: true, completion: nil) // let delayTime = DispatchTime.now() + Double(Int64(6 * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC) // DispatchQueue.main.asyncAfter(deadline: delayTime) { // controller.resetWithError() // } } // func barcodeScanner(_ controller: BarcodeScannerController, didCaptureCode code: String, type: String) { // // print(code) // // print(type) // self.address.text = code // controller.dismiss(animated: true, completion: nil) // // // let delayTime = DispatchTime.now() + Double(Int64(6 * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC) // // DispatchQueue.main.asyncAfter(deadline: delayTime) { // // controller.resetWithError() // // } // } } extension FF_HeadCell: BarcodeScannerErrorDelegate { func scanner(_ controller: BarcodeScannerViewController, didReceiveError error: Error) { print(error) } // func barcodeScanner(_ controller: BarcodeScannerController, didReceiveError error: Error) { // print(error) // } } extension FF_HeadCell: BarcodeScannerDismissalDelegate { func scannerDidDismiss(_ controller: BarcodeScannerViewController) { controller.dismiss(animated: true, completion: nil) } // func barcodeScannerDidDismiss(_ controller: BarcodeScannerController) { // controller.dismiss(animated: true, completion: nil) // } }