// // XinZengDiZhiViewController.swift // GeliBusinessPlatform // // Created by junye lu on 2020/4/26. // Copyright © 2020 junye lu. All rights reserved. // import UIKit import SwiftyJSON protocol XinZengDiZhiViewControllerDelegate { func XinZengDiZhiViewControllerFinishAction(name:String,phone:String,adr:String, data: AddAddressDataModel?,province_name:String,city_name:String,district_name:String) } class XinZengDiZhiViewController: BaseViewController,UITableViewDelegate,UITableViewDataSource,TitleAndTFAndBtnCellDelegate, UIPickerViewDelegate, UIPickerViewDataSource,SJMapViewControllerDelegate,UITextFieldDelegate,TitleAndSwitchCellDelegate,GeliAlertViewDelegate{ var address_id:Int? func sureGeliAlertViewAction(sender: UIButton) { let UserToken = UserDefaults.standard.value(forKey: "user_token") if sender.tag == 999 { AddressDel(["user_token":UserToken as Any,"address_id":address_id as Any], success: { (data) in self.delegate?.XinZengDiZhiViewControllerFinishAction(name: self.nameStr, phone: self.phone, adr: self.adrStr, data: nil,province_name:"",city_name:"",district_name:"") self.navigationController?.popViewController(animated: true) }) { (error) in } return } HUD.flash(.progress) let proDict = addressArray[provinceIndex] as! Dictionary<String,Any> var cityDict:Dictionary<String,Any> = Dictionary() var areaDict:Dictionary<String,Any> = Dictionary() cityDict["area_id"] = "" areaDict["area_id"] = "" cityDict["area_name"] = "" areaDict["area_name"] = "" if (proDict["city_list"] as! NSArray).count > 0 { cityDict = (proDict["city_list"] as! NSArray)[cityIndex] as! Dictionary<String, Any> if (cityDict["district_list"] as! NSArray).count > 0 { areaDict = (cityDict["district_list"] as! NSArray)[areaIndex] as! Dictionary<String,Any> } } var defalut = 0 if is_default { defalut = 1 } var send_default = 0 if is_send_default { send_default = 1 } if navTitle == "编辑地址"{ let dict = [ "user_token":UserToken as Any, "address_id":address_id as Any, "consignee":nameStr as Any, "province":proDict["area_id"]! as Any, "city":cityDict["area_id"]! as Any, "district":areaDict["area_id"]! as Any, "street":0 as Any, "address":adrStr as Any, "mobile":phone as Any, "tel":tel as Any, "is_default":defalut as Any, "is_send_default":send_default as Any, ] EditAddress(dict, success: { (data) in self.delegate?.XinZengDiZhiViewControllerFinishAction(name: self.nameStr, phone: self.phone, adr: self.adrStr, data: nil,province_name:"",city_name:"",district_name:"") self.navigationController?.popViewController(animated: true) HUD.hide() }) { (error) in } }else{ let dict = [ "user_token":UserToken as Any, "consignee":nameStr as Any, "province":proDict["area_id"]! as Any, "city":cityDict["area_id"]! as Any, "district":areaDict["area_id"]! as Any, "street":0 as Any, "address":adrStr as Any, "mobile":phone as Any, "tel":tel as Any, "is_default":defalut as Any, "is_send_default":send_default as Any, ] AddAddress(dict, success: { (data) in let dataModel = data as! AddAddressModel self.delegate?.XinZengDiZhiViewControllerFinishAction(name: self.nameStr, phone: self.phone, adr: self.adrStr, data: dataModel.data,province_name:proDict["area_name"] as! String,city_name:cityDict["area_name"] as! String,district_name:areaDict["area_name"] as! String) self.navigationController?.popViewController(animated: true) HUD.hide() }) { (error) in } } } var delegate:XinZengDiZhiViewControllerDelegate? //选择的省索引 var provinceIndex = 0 //选择的市索引 var cityIndex = 0 //选择的区(县)索引 var areaIndex = 0 var adrStr = ""//详细地址 var nameStr = ""//收货人 var phone = ""//手机 var tel = ""//电话 var zip = ""//邮编 var is_send_default = false//默认发货 var is_default = false //默认收货 let titleArr = ["收货人:","地址:","详细地址:","手机号:","电话:","邮编:"] var holderArr = ["请填写收货人姓名","请选择城市","请输入详细地址","请输入手机号","请输入电话","请输入邮编"] @IBOutlet weak var listView: UITableView! @IBAction func saveAction(_ sender: Any) { print("save ") if nameStr.count == 0{ HUD.flash(.label("请填写收货人姓名"), delay: 1.2) return } if holderArr[1] == "请选择城市"{ HUD.flash(.label("请选择城市"), delay: 1.2) return } if adrStr.count == 0 { HUD.flash(.label("请输入详细地址"), delay: 1.2) return } if phone.count == 0{ HUD.flash(.label("请输入手机号"), delay: 1.2) return } let alertView = GeliAlertView(frame: self.view.window!.bounds) alertView.delegate = self alertView.tishiLbl.text = "" if navTitle == "编辑地址"{ alertView.titileLbl.text = "是否提交地址修改?" }else{ alertView.titileLbl.text = "是否保存当前地址?" } alertView.rightBtn.setAttributedTitle(NSAttributedString(string: "确定"), for: .normal) self.view.window?.addSubview(alertView) } var pcdStr:String? var navTitle:String? func getIndex(){ let path = Bundle.main.path(forResource: "address_new", ofType: "json") let url = URL(fileURLWithPath: path!) // 带throws的方法需要抛异常 do { let data = try Data(contentsOf: url) let jsonData = JSON(data) print("地址文件数据",jsonData["data"]) self.addressArray = jsonData["data"].arrayObject! if navTitle == "编辑地址" { for i in 0 ..< addressArray.count { let item = addressArray[i] as! Dictionary<String,Any> if item["area_id"] as! Int == provinceIndex { let citys = item["city_list"] as! Array<Dictionary<String,Any>> if citys.count == 0 { provinceIndex = i } for j in 0 ..< citys.count { let cItem = citys[j] if cItem["area_id"] as! Int == cityIndex { let districts = cItem["district_list"] as! Array<Dictionary<String,Any>> if districts.count == 0 { cityIndex = j } for k in 0 ..< districts.count{ let dItem = districts[k] if dItem["area_id"] as! Int == areaIndex{ print("id === ",k,dItem["area_id"],areaIndex) provinceIndex = i cityIndex = j areaIndex = k break } } } } }else{ provinceIndex = 0 cityIndex = 0 areaIndex = 0 } } } } catch let error as Error? { print("读取本地数据出现错误!",error as Any) } } override func viewDidLoad() { super.viewDidLoad() getIndex() navbar.title = navTitle if navTitle == "编辑地址" { navbar.rightTitle = "删除" if pcdStr != nil { holderArr.insert(pcdStr!, at: 1) holderArr.remove(at: 2) } } self.view.addSubview(navbar) listView.separatorStyle = .none listView.snp.makeConstraints { (make) in make.top.equalTo(NavCGRect.height) make.left.right.equalTo(0) make.height.equalTo(418*glscale) } listView.isScrollEnabled = false listView.register(UINib(nibName: "TitleAndTFCell", bundle: nil), forCellReuseIdentifier: "TitleAndTFCell") listView.register(UINib(nibName: "TitleAndBtnCell", bundle: nil), forCellReuseIdentifier: "TitleAndBtnCell") listView.register(UINib(nibName: "TitleAndSwitchCell", bundle: nil), forCellReuseIdentifier: "TitleAndSwitchCell") listView.register(UINib(nibName: "TitleAndTFAndBtnCell", bundle: nil), forCellReuseIdentifier: "TitleAndTFAndBtnCell") // Do any additional setup after loading the view. } @objc func adrSelectFinish(sender:UIButton){ var proName = "" var cityName = "" var areaName = "" let proDict = addressArray[provinceIndex] as! Dictionary<String,Any> proName = proDict["area_name"] as! String if (proDict["city_list"] as! NSArray).count > 0 { let cityDict = (proDict["city_list"] as! NSArray)[cityIndex] as! [String: AnyObject] cityName = cityDict["area_name"] as! String if (cityDict["district_list"] as! NSArray).count > 0 { let areaDict = (cityDict["district_list"] as! NSArray)[areaIndex] as! Dictionary<String,Any> areaName = areaDict["area_name"] as! String } } var selectAdr = proName if cityName.count > 0 { selectAdr = proName + "-" + cityName if areaName.count > 0 { selectAdr = proName + "-" + cityName + "-" + areaName } } holderArr.insert(selectAdr, at: 1) holderArr.remove(at: 2) bgBtn?.removeFromSuperview() btmView?.subviews.forEach({ (view) in view.removeFromSuperview() }) btmView?.removeFromSuperview() btmView = nil bgBtn = nil listView.reloadData() } @objc func closeAction(sender:UIButton){ bgBtn?.removeFromSuperview() btmView?.subviews.forEach({ (view) in view.removeFromSuperview() }) btmView?.removeFromSuperview() btmView = nil bgBtn = nil } var btmView:UIView? var bgBtn:UIButton? func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { print(indexPath.section,indexPath.row) if indexPath.section == 0 { if indexPath.row == 1 { if bgBtn == nil { let btn = UIButton() self.view.addSubview(btn) btn.backgroundColor = UIColor.black btn.alpha = 0.4 btn.addTarget(self, action: #selector(closeAction(sender:)), for: .touchUpInside) btn.snp.makeConstraints { (make) in make.top.right.bottom.left.equalTo(0) } bgBtn = btn } if btmView == nil { let view = UIView() view.backgroundColor = UIColor.white btmView = view self.view.addSubview(btmView!) btmView!.snp.makeConstraints { (make) in make.left.bottom.right.equalTo(0) make.height.equalTo(240) } showAreaSelect(view:btmView!) let rightBtn = UIButton() rightBtn.setTitle("确定", for: .normal) rightBtn.setTitleColor(UIColor(named: "蓝色字体颜色"), for: .normal) rightBtn.titleLabel?.font = UIFont.systemFont(ofSize: 15) rightBtn.addTarget(self, action: #selector(adrSelectFinish(sender:)), for: .touchUpInside) btmView?.addSubview(rightBtn) rightBtn.snp.makeConstraints { (make) in make.right.equalTo(-15) make.top.equalTo(10) make.height.equalTo(30) make.width.equalTo(50) } let leftBtn = UIButton() leftBtn.setTitle("取消", for: .normal) leftBtn.setTitleColor(UIColor(named: "多选按钮字体颜色"), for: .normal) leftBtn.titleLabel?.font = UIFont.systemFont(ofSize: 15) leftBtn.addTarget(self, action: #selector(closeAction(sender:)), for: .touchUpInside) btmView?.addSubview(leftBtn) leftBtn.snp.makeConstraints { (make) in make.left.equalTo(15) make.top.equalTo(10) make.height.equalTo(30) make.width.equalTo(50) } } } } } func rightBtnClick() { let alertView = GeliAlertView(frame: self.view.window!.bounds) alertView.delegate = self alertView.tishiLbl.text = "" alertView.titileLbl.text = "是否删除地址?" alertView.rightBtn.setAttributedTitle(NSAttributedString(string: "确定"), for: .normal) alertView.rightBtn.tag = 999 self.view.window?.addSubview(alertView) } //MARK: - cell delegate func TitleAndTFAndBtnCellBtnClick() { let vc = SJMapViewController() vc.delegate = self self.navigationController?.pushViewController(vc, animated: true) } func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let view = UIView(frame: CGRect(x: 0, y: 0, width: fullScreenWidth, height: 10*glscale)) view.backgroundColor = UIColor.clear return view } func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { if section != 0 { return 10*glscale } return 0.001 } func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 49*glscale } func numberOfSections(in tableView: UITableView) -> Int { return 3 } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { if section == 0 { return 6 } return 1 } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { switch indexPath.section { case 0: if indexPath.row != 1 && indexPath.row != 2 { let cell = tableView.dequeueReusableCell(withIdentifier: "TitleAndTFCell") as! TitleAndTFCell cell.nameLbl.text = titleArr[indexPath.row] if indexPath.row == 0 {//收货人 cell.textTF.keyboardType = .default cell.textTF.text = nameStr } if indexPath.row == 3 {//手机 cell.textTF.keyboardType = .numberPad cell.textTF.text = phone } if indexPath.row == 4 {//电话 cell.textTF.keyboardType = .numberPad cell.textTF.text = tel } if indexPath.row == 5 {//邮编 cell.textTF.keyboardType = .numberPad cell.textTF.text = zip } cell.textTF.placeholder = holderArr[indexPath.row] cell.tag = indexPath.row cell.textTF.tag = cell.tag cell.textTF.delegate = self return cell } if indexPath.row == 1 { let cell = tableView.dequeueReusableCell(withIdentifier: "TitleAndBtnCell") as! TitleAndBtnCell cell.nameLbl.text = titleArr[indexPath.row] cell.contentLbl.text = holderArr[indexPath.row] cell.btn.isUserInteractionEnabled = false return cell } let cell = tableView.dequeueReusableCell(withIdentifier: "TitleAndTFAndBtnCell") as! TitleAndTFAndBtnCell cell.titleLbl.text = titleArr[indexPath.row] cell.textTF.text = adrStr cell.textTF.delegate = self cell.textTF.tag = 2 cell.textTF.placeholder = holderArr[indexPath.row] cell.delegate = self return cell default: let cell = tableView.dequeueReusableCell(withIdentifier: "TitleAndSwitchCell") as! TitleAndSwitchCell cell.namelbl.text = "设为默认收货地址" if indexPath.section == 1 { cell.namelbl.text = "设为默认寄件地址" cell.infoSw.isOn = is_send_default }else{ cell.infoSw.isOn = is_default } cell.tag = indexPath.section cell.delegate = self return cell } } //MARK:--地址选择器 func showAreaSelect(view:UIView){ //创建选择器 pickerView=UIPickerView() //将dataSource设置成自己 pickerView.dataSource=self //将delegate设置成自己 pickerView.delegate=self view.addSubview(pickerView) pickerView.snp.makeConstraints { (make) in make.top.equalTo(30) make.left.right.bottom.equalTo(0) } pickerView.selectRow(provinceIndex, inComponent: 0, animated: false) pickerView(pickerView, didSelectRow: provinceIndex, inComponent: 0) pickerView.selectRow(cityIndex, inComponent: 1, animated: false) pickerView(pickerView, didSelectRow: cityIndex, inComponent: 1) pickerView.selectRow(areaIndex, inComponent: 2, animated: false) pickerView(pickerView, didSelectRow: areaIndex, inComponent: 2) } //选择器 var pickerView:UIPickerView! //所以地址数据集合 var addressArray:Array<Any> = [] //设置选择框的列数为3列,继承于UIPickerViewDataSource协议 func numberOfComponents(in pickerView: UIPickerView) -> Int { return 3 } //设置选择框的行数,继承于UIPickerViewDataSource协议 func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { if component == 0 { return self.addressArray.count } else if component == 1 { let province = self.addressArray[provinceIndex] as! Dictionary<String,Any> return (province["city_list"]! as AnyObject).count } else { let province = self.addressArray[provinceIndex] as! Dictionary<String,Any> if (province["city_list"] as! NSArray).count == 0 { return 0 } if let city = (province["city_list"] as! NSArray)[cityIndex] as? [String: AnyObject] { print(city["district_list"] as Any) return city["district_list"]!.count } else { return 0 } } } //设置选择框各选项的内容,继承于UIPickerViewDelegate协议 func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { if component == 0 { let rowDic = self.addressArray[row] as! Dictionary<String,Any> return rowDic["area_name"] as? String }else if component == 1 { let province = self.addressArray[provinceIndex] as! Dictionary<String,Any> let city = (province["city_list"] as! NSArray)[row] as! [String: AnyObject] return city["area_name"] as? String }else { let province = self.addressArray[provinceIndex] as! Dictionary<String,Any> let city = (province["city_list"] as! NSArray)[cityIndex] as! [String: AnyObject] let area = (city["district_list"] as! NSArray)[row] as! Dictionary<String,Any> return area["area_name"] as? String } } //选中项改变事件(将在滑动停止后触发) func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { //根据列、行索引判断需要改变数据的区域 switch (component) { case 0: provinceIndex = row; pickerView.reloadComponent(1); pickerView.reloadComponent(2); pickerView.selectRow(cityIndex, inComponent: 1, animated: false) pickerView.selectRow(areaIndex, inComponent: 2, animated: false) case 1: cityIndex = row; pickerView.reloadComponent(2); pickerView.selectRow(areaIndex, inComponent: 2, animated: false) case 2: areaIndex = row; default: break; } } func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat { return 50 } //自定义UIPickerView func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView { let genderLbl = UILabel() genderLbl.textAlignment = .center genderLbl.font = UIFont.systemFont(ofSize: 15) genderLbl.textColor = UIColor.init(named: "标题字颜色") if component == 0 { let rowDic = self.addressArray[row] as! Dictionary<String,Any> genderLbl.text = rowDic["area_name"] as? String }else if component == 1 { let province = self.addressArray[provinceIndex] as! Dictionary<String,Any> let city = (province["city_list"] as! NSArray)[row] as! [String: AnyObject] genderLbl.text = city["area_name"] as? String }else { let province = self.addressArray[provinceIndex] as! Dictionary<String,Any> let city = (province["city_list"] as! NSArray)[cityIndex] as! [String: AnyObject] let area = (city["district_list"] as! NSArray)[row] as! Dictionary<String,Any> genderLbl.text = area["area_name"] as? String } return genderLbl } func SJMapViewControllerSelectArd(adr: String) { adrStr = adr listView.reloadData() } func textFieldDidEndEditing(_ textField: UITextField) { if textField.tag == 0 { if textField.text!.containsEmoji { HUD.flash(.label("内容不得包含表情符号"), delay: 1.2) textField.text = "" }else{ nameStr = textField.text! } } if textField.tag == 3 { phone = textField.text! } if textField.tag == 4 { tel = textField.text! } if textField.tag == 5 { zip = textField.text! } if textField.tag == 2 { adrStr = textField.text! } listView.reloadData() } func switchClick(content: UISwitch, cell: TitleAndSwitchCell) { if cell.tag == 1 {//寄件 is_send_default = content.isOn }else{//收件 is_default = content.isOn } } }