FF_HeadCell.swift 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421
  1. //
  2. // FF_HeadCell.swift
  3. // SolarLamp
  4. //
  5. // Created by liaolj on 16/12/24.
  6. // Copyright © 2016年 SolarLamp. All rights reserved.
  7. import UIKit
  8. import Reusable
  9. import RxCocoa
  10. import RxSwift
  11. import BarcodeScanner
  12. import MapKit
  13. extension FF_HeadCell: UITextFieldDelegate {
  14. func textFieldDidEndEditing(_ textField: UITextField) {
  15. let content = textField.text
  16. switch textField {
  17. case lamp_no:
  18. self.targetVC?.rawSettingData["lamp_no"] = content
  19. case section:
  20. self.targetVC?.rawSettingData["section"] = content
  21. case address:
  22. self.targetVC?.rawSettingData["address"] = content
  23. case latitude:
  24. self.targetVC?.rawSettingData["latitude"] = content
  25. default:
  26. break
  27. }
  28. }
  29. }
  30. class FF_HeadCell: UITableViewCell, NibReusable {
  31. // typealias coordinationCallBack = ((CLLocationCoordinate2D)->())?
  32. // var callBack:((CLLocationCoordinate2D)->())?
  33. @IBOutlet weak var network_name:UITextField!
  34. @IBOutlet weak var lamp_no:UITextField!
  35. @IBOutlet weak var section:UITextField!
  36. @IBOutlet weak var address:UITextField!
  37. @IBOutlet weak var latitude:UITextField!
  38. @IBOutlet weak var longitude:UITextField!
  39. @IBOutlet weak var netSelectBox: UIView!//wirelessIDAction
  40. @IBOutlet weak var autoLocationButton: KKWButton!
  41. @IBOutlet weak var mapSelectBox: KKWView!
  42. @IBOutlet weak var wirelessIDBox: UIView!//wirelessIDAction
  43. @IBOutlet weak var devicetypeLabel: UILabel!
  44. //label text
  45. @IBOutlet weak var devicetypeTextfield: UITextField!
  46. @IBOutlet weak var devicetypeSelectedView: UIView!
  47. @IBOutlet weak var lampprotocoltypeLabel: UILabel!
  48. @IBOutlet weak var lampprotocoltypeTextfield: UITextField!
  49. @IBOutlet weak var lampprotocoltypeSelectedView: UIView!
  50. @IBOutlet weak var netword_nameLabel: UILabel!
  51. var devicetype : Int?
  52. var lampprotocoltype : Int?
  53. var protocoltype: Int?
  54. var isDirectConnection : Bool? = false{
  55. didSet{
  56. if self.isDirectConnection! {
  57. self.network_name.placeholder = "network_ownPlaceholder".localizedstr()
  58. self.netword_nameLabel.text = "protocoltype".localizedstr()
  59. self.network_name.text = ""
  60. } else {
  61. self.network_name.placeholder = "network_ownPlaceholder".localizedstr()
  62. self.netword_nameLabel.text = "network_own".localizedstr()
  63. self.network_name.text = ""
  64. }
  65. }
  66. }
  67. weak var targetVC:DlightDetailEditTVC? {
  68. didSet {
  69. dataInit()
  70. }
  71. }
  72. @IBOutlet weak var pickeImageView:UIImageView!
  73. override func awakeFromNib() {
  74. super.awakeFromNib()
  75. // setupRx()
  76. setupNormal()
  77. // Initialization code
  78. }
  79. func setupNormal() {
  80. lamp_no.delegate = self
  81. section.delegate = self
  82. address.delegate = self
  83. latitude.delegate = self
  84. network_name.isEnabled = false
  85. devicetypeTextfield.isEnabled = false
  86. lampprotocoltypeTextfield.isEnabled = false
  87. devicetypeLabel.text = "devicetype".localizedstr()
  88. devicetypeTextfield.placeholder = "devicetypePlaceholder".localizedstr()
  89. lampprotocoltypeLabel.text = "lampprotocoltype".localizedstr()
  90. lampprotocoltypeTextfield.placeholder = "lampprotocoltypePlaceholder".localizedstr()
  91. devicetypeSelectedView.isUserInteractionEnabled = true
  92. lampprotocoltypeSelectedView.isUserInteractionEnabled = true
  93. let devicetypeSelectBoxTapGesture = UITapGestureRecognizer(target: self, action: #selector(FF_HeadCell.devicetypeSeletedAction))
  94. let lampprotocoltypeSelectBoxTapGesture = UITapGestureRecognizer(target: self, action: #selector(FF_HeadCell.lampprotocoltypeSelectedAction))
  95. devicetypeSelectedView.addGestureRecognizer(devicetypeSelectBoxTapGesture)
  96. lampprotocoltypeSelectedView.addGestureRecognizer(lampprotocoltypeSelectBoxTapGesture)
  97. let netSelectBoxTapGesture = UITapGestureRecognizer.init(target: self, action: #selector(FF_HeadCell.netSelectBoxAction))
  98. netSelectBox.addGestureRecognizer(netSelectBoxTapGesture)
  99. autoLocationButton.addTarget(self, action: #selector(FF_HeadCell.autoLocationButtonAction), for: UIControlEvents.touchUpInside)
  100. let mapSelectBoxTapGesture = UITapGestureRecognizer.init(target: self, action: #selector(FF_HeadCell.mapSelectBoxAction))
  101. mapSelectBox.addGestureRecognizer(mapSelectBoxTapGesture)
  102. let wirelessIDBoxTapGesture = UITapGestureRecognizer.init(target: self, action: #selector(FF_HeadCell.wirelessIDBoxAction))
  103. wirelessIDBox.addGestureRecognizer(wirelessIDBoxTapGesture)
  104. }
  105. @objc func devicetypeSeletedAction(tap:UITapGestureRecognizer) {
  106. log.debug("设备类型选择")
  107. let deviceTypes = ["直连设备","非直连设备"]
  108. let deviceTypePick = THScrollChooseView(question: deviceTypes, withDefaultDesc:"非直连设备")
  109. deviceTypePick!.show()
  110. deviceTypePick?.confirmBlock = {[weak self](selectedIndex) in
  111. log.debug(deviceTypes[selectedIndex])
  112. self?.devicetypeTextfield.text = deviceTypes[selectedIndex]
  113. if selectedIndex == 0 {
  114. self?.isDirectConnection = true
  115. self?.devicetype = 1
  116. self?.targetVC?.devicetype = 1
  117. self?.targetVC?.rawSettingData["devicetype"] = "1"
  118. }else{
  119. self?.isDirectConnection = false
  120. self?.devicetype = 0
  121. self?.targetVC?.devicetype = 0
  122. self?.targetVC?.rawSettingData["devicetype"] = "0"
  123. }
  124. }
  125. }
  126. @objc func lampprotocoltypeSelectedAction(tap:UITapGestureRecognizer) {
  127. log.debug("灯控协议类型选择")
  128. let lampprotocoltypes = ["LightBus","ModBus"]
  129. let lampprotocoltypesPick = THScrollChooseView(question: lampprotocoltypes, withDefaultDesc:"LightBus")
  130. lampprotocoltypesPick!.show()
  131. lampprotocoltypesPick?.confirmBlock = {[weak self](selectedIndex) in
  132. log.debug(lampprotocoltypes[selectedIndex])
  133. self?.lampprotocoltypeTextfield.text = lampprotocoltypes[selectedIndex]
  134. self?.lampprotocoltype = selectedIndex
  135. self?.targetVC?.lampprotocoltype = selectedIndex
  136. self?.targetVC?.rawSettingData["lampprotocoltype"] = "\(selectedIndex)"
  137. }
  138. }
  139. @objc func netSelectBoxAction(tap: UITapGestureRecognizer) {
  140. if isDirectConnection! {
  141. log.debug("选择网络协议类型")
  142. let netAgreementTypes = ["tcp","nb","gprs","lorawan"]
  143. let netAgreementTypePick = THScrollChooseView(question: netAgreementTypes, withDefaultDesc:nil)
  144. netAgreementTypePick!.show()
  145. netAgreementTypePick?.confirmBlock = {[weak self](selectedIndex) in
  146. log.debug(netAgreementTypes[selectedIndex])
  147. self?.network_name.text = netAgreementTypes[selectedIndex]
  148. self?.protocoltype = selectedIndex
  149. self?.targetVC?.protocoltype = selectedIndex
  150. self?.targetVC?.rawSettingData["protocoltype"] = "\(selectedIndex)"
  151. }
  152. } else {
  153. let vc = KKWMainVCType.KKWNetworkSelectVC.getClass() as! KKWNetworkSelectVC
  154. vc.project_id = self.targetVC?.project_id
  155. vc.dismissCallBack = { [weak self] network in
  156. self?.targetVC?.selectNetwork = network
  157. }
  158. self.targetVC?.navigationController?.pushViewController(vc, animated: false)
  159. }
  160. }
  161. @objc func autoLocationButtonAction(sender: UIButton) {
  162. KKWLocationService.shareInstance.callBack = { [weak self] coordinate in
  163. self?.coordinate = coordinate
  164. }
  165. KKWLocationService.shareInstance.start()
  166. }
  167. @objc func mapSelectBoxAction(tap: UITapGestureRecognizer) {
  168. let vc = KKWDeviceRootVCType.fetchMap.getClass() as! DMapFetchLocationVC
  169. vc.coordinationCallBack = { [weak self]coordinate in
  170. self?.coordinate = coordinate
  171. }
  172. self.targetVC?.navigationController?.pushViewController(vc, animated: false)
  173. }
  174. @objc func wirelessIDBoxAction(tap: UITapGestureRecognizer) {
  175. let controller = BarcodeScannerViewController()
  176. controller.codeDelegate = self
  177. controller.errorDelegate = self
  178. controller.dismissalDelegate = self
  179. self.targetVC?.present(controller, animated: true, completion: nil)
  180. }
  181. /*
  182. 0110e00200244800c8000c000b008e008d0096008c008c0096008c0096008c0091000000000005000a000f00080008000800080008003c000a003c000a00000000000f00080000000a0001000500e4e8ee
  183. */
  184. func setupRx() {
  185. lamp_no.rx.text.subscribe(onNext: { [weak self](content) in
  186. self?.targetVC?.rawSettingData["lamp_no"] = content
  187. }).addDisposableTo(disposeBag)
  188. section.rx.text.subscribe(onNext: { [weak self](content) in
  189. self?.targetVC?.rawSettingData["section"] = content
  190. }).disposed(by: disposeBag)
  191. address.rx.text.subscribe(onNext: { [weak self](content) in
  192. self?.targetVC?.rawSettingData["address"] = content
  193. }).disposed(by: disposeBag)
  194. latitude.rx.text.subscribe(onNext: { [weak self](content) in
  195. let con = Double(content!)
  196. let lat = con! + 0.006
  197. self?.targetVC?.rawSettingData["latitude"] = content
  198. }).disposed(by: disposeBag)
  199. longitude.rx.text.subscribe(onNext: { [weak self](content) in
  200. let con2 = Double(content!) //string 转double
  201. let lng = con2! + 0.0065
  202. self?.targetVC?.rawSettingData["longitude"] = content
  203. }).disposed(by: disposeBag)
  204. //netSelectBox.rx.gesture(RxGestureTypeOption.tap).subscribe(onNext:{}).addDisposableTo(rx_disposeBag)
  205. netSelectBox.rx.gesture(RxGestureTypeOption.tap).subscribe(onNext: { [weak self]_ in
  206. let vc = KKWMainVCType.KKWNetworkSelectVC.getClass() as! KKWNetworkSelectVC
  207. vc.project_id = self?.targetVC?.project_id
  208. vc.dismissCallBack = { network in
  209. self?.targetVC?.selectNetwork = network
  210. }
  211. self?.targetVC?.navigationController?.pushViewController(vc, animated: false)
  212. }).disposed(by: disposeBag)
  213. autoLocationButton.rx.tap.subscribe(onNext: { [weak self]_ in
  214. KKWLocationService.shareInstance.callBack = { coordinate in
  215. self?.coordinate = coordinate
  216. }
  217. KKWLocationService.shareInstance.start()
  218. }).addDisposableTo(disposeBag)
  219. mapSelectBox.rx.gesture(RxGestureTypeOption.tap).subscribe(onNext: { [weak self] _ in
  220. let vc = KKWDeviceRootVCType.fetchMap.getClass() as! DMapFetchLocationVC
  221. vc.coordinationCallBack = { coordinate in
  222. self?.coordinate = coordinate
  223. }
  224. self?.targetVC?.navigationController?.pushViewController(vc, animated: false)
  225. }).addDisposableTo(disposeBag) //wirelessIDBox
  226. wirelessIDBox.rx.gesture(RxGestureTypeOption.tap).subscribe(onNext: { [weak self] _ in
  227. let controller = BarcodeScannerViewController()
  228. controller.codeDelegate = self
  229. controller.errorDelegate = self
  230. controller.dismissalDelegate = self
  231. self?.targetVC?.present(controller, animated: true, completion: nil)
  232. // self?.targetVC?.navigationController?.pushViewController(vc, animated: false)
  233. }).disposed(by: disposeBag)//wirelessIDBox
  234. }
  235. var coordinate:CLLocationCoordinate2D! {
  236. didSet {
  237. //高德地图坐标
  238. let lat = String(format: "%.6f", coordinate.latitude + 0.006 )
  239. let lng = String(format: "%.6f", coordinate.longitude + 0.0065)
  240. let geoArr = geoExchangeBDGeoWith(lat: coordinate.latitude, lng: coordinate.longitude)
  241. log.debug("直接+ lat: \(lat),lng:\(lng) 进一步处理 \(geoArr[0]),\(geoArr[1])")
  242. targetVC?.rawSettingData["latitude"] = geoArr[0]
  243. targetVC?.rawSettingData["longitude"] = geoArr[1]
  244. }
  245. }
  246. func dataInit() {
  247. //设备类型
  248. let devicetypeInt = targetVC?.rawSettingData["devicetype"]
  249. var devicetypeStr1 : String?
  250. if devicetypeInt == "1" {
  251. devicetypeStr1 = "direct_device".localizedstr()
  252. }else{
  253. devicetypeStr1 = "indirce_device".localizedstr()
  254. }
  255. devicetypeTextfield.text = devicetypeStr1
  256. //协议类型
  257. let lampprotocoltypeInt = self.targetVC?.rawSettingData["lampprotocoltype"]
  258. var lampprotocoltypeStr : String?
  259. if lampprotocoltypeInt == "0" {
  260. lampprotocoltypeStr = "LightBus"
  261. }else{
  262. lampprotocoltypeStr = "ModBus"
  263. }
  264. lampprotocoltypeTextfield.text = lampprotocoltypeStr
  265. let protocoltypeInt = targetVC?.rawSettingData["protocoltype"]
  266. var protocoltypeStr : String?
  267. if protocoltypeInt == "0" {
  268. protocoltypeStr = "tcp"
  269. }else if protocoltypeInt == "1"{
  270. protocoltypeStr = "nb"
  271. }else if protocoltypeInt == "2"{
  272. protocoltypeStr = "gprs"
  273. }else if protocoltypeInt == "3"{
  274. protocoltypeStr = "lorawan"
  275. }
  276. self.targetVC?.devicetype = Int(devicetypeInt!)
  277. self.targetVC?.lampprotocoltype = Int(lampprotocoltypeInt!)
  278. self.targetVC?.protocoltype = Int(protocoltypeInt!)
  279. if devicetypeInt == "1"{
  280. devicetype = 1
  281. isDirectConnection = true
  282. network_name.text = protocoltypeStr
  283. }else{
  284. network_name.text = targetVC?.rawSettingData["network_name"]
  285. isDirectConnection = false
  286. devicetype = 0
  287. }
  288. lamp_no.text = targetVC?.rawSettingData["lamp_no"]
  289. section.text = targetVC?.rawSettingData["section"]
  290. address.text = targetVC?.rawSettingData["address"] //这个是
  291. latitude.text = targetVC?.rawSettingData["latitude"]
  292. longitude.text = targetVC?.rawSettingData["longitude"]
  293. }
  294. override func setSelected(_ selected: Bool, animated: Bool) {
  295. super.setSelected(selected, animated: animated)
  296. // Configure the view for the selected state
  297. }
  298. }
  299. extension FF_HeadCell: BarcodeScannerCodeDelegate {
  300. func scanner(_ controller: BarcodeScannerViewController, didCaptureCode code: String, type: String) {
  301. // print(code)
  302. // print(type)
  303. self.address.text = code
  304. controller.dismiss(animated: true, completion: nil)
  305. // let delayTime = DispatchTime.now() + Double(Int64(6 * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC)
  306. // DispatchQueue.main.asyncAfter(deadline: delayTime) {
  307. // controller.resetWithError()
  308. // }
  309. }
  310. // func barcodeScanner(_ controller: BarcodeScannerController, didCaptureCode code: String, type: String) {
  311. // // print(code)
  312. // // print(type)
  313. // self.address.text = code
  314. // controller.dismiss(animated: true, completion: nil)
  315. //
  316. // // let delayTime = DispatchTime.now() + Double(Int64(6 * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC)
  317. // // DispatchQueue.main.asyncAfter(deadline: delayTime) {
  318. // // controller.resetWithError()
  319. // // }
  320. // }
  321. }
  322. extension FF_HeadCell: BarcodeScannerErrorDelegate {
  323. func scanner(_ controller: BarcodeScannerViewController, didReceiveError error: Error) {
  324. print(error)
  325. }
  326. // func barcodeScanner(_ controller: BarcodeScannerController, didReceiveError error: Error) {
  327. // print(error)
  328. // }
  329. }
  330. extension FF_HeadCell: BarcodeScannerDismissalDelegate {
  331. func scannerDidDismiss(_ controller: BarcodeScannerViewController) {
  332. controller.dismiss(animated: true, completion: nil)
  333. }
  334. // func barcodeScannerDidDismiss(_ controller: BarcodeScannerController) {
  335. // controller.dismiss(animated: true, completion: nil)
  336. // }
  337. }