// // IHAddTitleAddressView.swift // Inhealth // // Created by weclouds on 2020/1/6. // Copyright © 2020 weclouds. All rights reserved. // import UIKit protocol IHAddTitleAddressViewDelegate { func cancelClick(_ titleAddress :String,titleID:String) func cancel() } class IHAddTitleAddressView: UIView { var delegate:IHAddTitleAddressViewDelegate? var defaultHeight :CGFloat = 200 var title:String = "Please choose Hotel" var isclick:Bool = false //判断是滚动还是点击 var addAddressView:UIView = UIView() lazy var countryMarr : [DropDownData] = [DropDownData]()//国家 lazy var provinceArr : [DropDownData] = [DropDownData]() //省份 lazy var cityArr : [DropDownData] = [DropDownData]()//城市 lazy var hotelArr : [DropDownData] = [DropDownData]()//酒店 var titleScrollView :UIScrollView = UIScrollView() var contentScrollView :UIScrollView = UIScrollView() var radioBtn :UIButton = UIButton() var lineLabel : UILabel = UILabel() var titleScrollViewH : CGFloat = 37 var titleArr :[String] = [String]() var titleIDArr :[String] = [String]() var tableViewArr:[UITableView] = [UITableView]() lazy var titleBtns : [UIButton] = [UIButton]() override init(frame: CGRect) { super.init(frame: frame) initAddressView() } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } } extension IHAddTitleAddressView { ///初始化UI func initAddressView() { let tap = UITapGestureRecognizer(target: self, action: #selector(tapBtnAndcancelBtnClick)) tap.delegate = self addGestureRecognizer(tap) //添加地址的view addAddressView.frame = CGRect(x: 0, y: 0, width: KSCREENWIDTH, height: defaultHeight) addAddressView.backgroundColor = .white addSubview(addAddressView) //标题 let titleLabel = UILabel(frame: CGRect(x: 16, y:10 , width: KSCREENWIDTH - 80, height: 30)) titleLabel.text = title titleLabel.textAlignment = .left titleLabel.textColor = UIColor(hexString: "333333") titleLabel.font = UIFont(name: PingFangSC_Semibold, size: 16) addAddressView.addSubview(titleLabel) let cancelBtn = UIButton(type: .custom) cancelBtn.frame = CGRect(x: addAddressView.frame.maxX - 40, y: 10, width: 30, height: 30) cancelBtn.setImage(UIImage(named: "ic_quxiao"), for: .normal) cancelBtn.addTarget(self, action: #selector(cancelAction), for: .touchUpInside) addAddressView.addSubview(cancelBtn) let tableView = UITableView(frame: CGRect(x: 0, y: 0, width: KSCREENWIDTH, height: 200), style: .plain) tableView.separatorStyle = .none tableView.tag = 1000000 + 0 self.tableViewArr.append(tableView) titleArr.append("Please choose") //添加标题滚动视图 setupTitleScrollView() //添加内容滚动视图 setupContentScrollView() setupAllTitle(0) } //取消操作 @objc func cancelAction() { if let delegate = self.delegate { delegate.cancel() } } ///收回的动画效果 @objc func tapBtnAndcancelBtnClick() { var titleAddress = "" var titleID = "" var count = 0 let str = self.titleArr[self.titleArr.count - 1] if str == "Please choose"{ count = self.titleArr.count - 1 }else{ count = self.titleArr.count } for i in 0.. 0 && self.titleIDArr.count > 0{ Intermediate.countryName = titleArr.first! Intermediate.countryId = titleIDArr.first! } self.delegate?.cancelClick(titleAddress, titleID: titleID) } private func stringForWidth(text: String, font: UIFont, height: CGFloat) -> CGFloat { let size = CGSize(width: CGFloat(MAXFLOAT), height: height) let rect = NSString(string: text).boundingRect(with: size, options: [.usesFontLeading, .usesLineFragmentOrigin], attributes: [.font: font], context: nil) return ceil(rect.width) } } extension IHAddTitleAddressView:UIScrollViewDelegate{ func setupTitleScrollView() { //TitleScrollView 和 分割线 titleScrollView.frame = CGRect(x: 0, y: 50, width: KSCREENWIDTH, height: titleScrollViewH) addAddressView.addSubview(titleScrollView) let lineView = UIView(frame: CGRect(x: 0, y: titleScrollView.frame.maxY, width: KSCREENWIDTH, height: 0.5)) lineView.backgroundColor = .gray addAddressView.addSubview(lineView) } func setupContentScrollView() { let y = titleScrollView.frame.maxY + 1 contentScrollView.frame = CGRect(x: 0, y: y, width: KSCREENWIDTH, height: defaultHeight - y) addAddressView.addSubview(contentScrollView) contentScrollView.delegate = self contentScrollView.bounces = false contentScrollView.isPagingEnabled = true } ///设置所有title func setupAllTitle(_ selectId :Int) { for view in titleScrollView.subviews { view.removeSubviews() } self.titleBtns.removeAll() let btnH = self.titleScrollViewH // #05CFAB lineLabel.backgroundColor = UIColor(hexString: "#573F95") titleScrollView.addSubview(lineLabel) var x : CGFloat = 16 for i in 0.. Int { let index = tableView.tag - 1000000 if index == 0 { return self.countryMarr.count }else if index == 1{ return self.provinceArr.count }else if index == 2{ return self.cityArr.count }else if index == 3{ return self.hotelArr.count } return 0 } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { var cell = tableView.dequeueReusableCell(withIdentifier: "cell") if cell == nil { cell = UITableViewCell(style: .default, reuseIdentifier: "cell") } let index = tableView.tag - 1000000 if index == 0 { let country = self.countryMarr[indexPath.row] cell?.textLabel?.text = country.name }else if index == 1{ let province = self.provinceArr[indexPath.row] cell?.textLabel?.text = province.name }else if index == 2{ let city = self.cityArr[indexPath.row] cell?.textLabel?.text = city.name }else if index == 3{ let hotel = self.hotelArr[indexPath.row] cell?.textLabel?.text = hotel.name } cell?.textLabel?.font = UIFont(name: PingFangSC_Regular, size: 13) cell?.textLabel?.textColor = .gray cell?.selectionStyle = .none return cell! } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let index = tableView.tag - 1000000 if index == 0 { let contry = self.countryMarr[indexPath.row] //1.修改选中的id if self.titleIDArr.count > 0 { self.titleIDArr[index] = contry.id! }else{ self.titleIDArr.append(contry.id!) } //2.修改标题 self.titleArr[index] = contry.name! log.debug("国家名称 --- \(contry.name!) ,国家id - \(contry.id!)") ///TODO : 请求网络,添加省份 getAddressMessageData(addressID: 2, countryIdOrProviceId: contry.id!) }else if index == 1{ let province = self.provinceArr[indexPath.row] //1.修改选中的id if self.titleIDArr.count > 1 { self.titleIDArr[index] = province.id! }else{ self.titleIDArr.append(province.id!) } //2.修改标题 self.titleArr[index] = province.name! ///TODO : 请求网络,添加城市 getAddressMessageData(addressID: 3, countryIdOrProviceId: province.id!) } else if index == 2 { let city = self.cityArr[indexPath.row] //1.修改选中的id if self.titleIDArr.count > 2 { self.titleIDArr[index] = city.id! }else{ self.titleIDArr.append(city.id!) } //2.修改标题 titleArr[index] = city.name! // getAddressMessageData(addressID: 4, countryIdOrProviceId: city.id!) getHotelMessage(4, code: city.id!) }else if index == 3{ let hotel = self.hotelArr[indexPath.row] var hotelIndex = index if self.provinceArr.count == 0 { hotelIndex = 1 }else if self.provinceArr.count > 0 && self.cityArr.count == 0{ hotelIndex = 2 } titleArr[hotelIndex] = hotel.name! if titleIDArr.count > hotelIndex { titleIDArr[hotelIndex] = hotel.id! } else { titleIDArr.append(hotel.id!) } setupAllTitle(index) self.tapBtnAndcancelBtnClick() } } func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 40 } } ///防止手势冲突 extension IHAddTitleAddressView :UIGestureRecognizerDelegate{ func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool { if NSStringFromClass(touch.view!.classForCoder) == "UITableViewCellContentView" || touch.view == addAddressView || touch.view == titleScrollView { return false } return true } } ///网络请求 extension IHAddTitleAddressView{ // func getHotelMessage(_ addressID: Int,code:String) { IHAddressService.share.getHotelList(code, requestSuccess: { (hotellist) in // self.case4(hotellist) self.hotelCase(addressID, hotellist: hotellist) // if self.tableViewArr.count >= addressID { for tableView1 in self.tableViewArr{ if tableView1.tag == 1000000 + 3 { tableView1.reloadData() } } // let tableView1 = self.tableViewArr[addressID - 1] // } }) { log.debug("失败了") } } func getAddressMessageData(addressID : Int,countryIdOrProviceId:String) { switch addressID { case 1: IHAddressService.share.getContryList(requestSuccess: { (contrylist) in self.case1(contrylist) if self.tableViewArr.count >= addressID { let tableView1 = self.tableViewArr[addressID - 1] tableView1.reloadData() } }) { log.debug("失败了") } case 2: IHAddressService.share.getProvinceList(countryIdOrProviceId, requestSuccess: { (provincelist) in if provincelist!.count == 0{ self.provinceArr.removeAll() let title1 = self.titleArr.first let table1 = self.tableViewArr.first self.tableViewArr.removeAll() self.titleArr.removeAll() self.titleArr.append(title1!) self.tableViewArr.append(table1!) self.getHotelMessage(2, code: countryIdOrProviceId) return } self.case2(provincelist!) if self.tableViewArr.count >= addressID { let tableView1 = self.tableViewArr[addressID - 1] tableView1.reloadData() } }) { log.debug("失败了") } case 3: IHAddressService.share.getCityeList(countryIdOrProviceId, requestSuccess: { (citylist) in if citylist!.count == 0{ self.cityArr.removeAll() let title1 = self.titleArr.first let table1 = self.tableViewArr.first let title2 = self.titleArr[1] let table2 = self.tableViewArr[1] self.tableViewArr.removeAll() self.titleArr.removeAll() self.titleArr.append(title1!) self.tableViewArr.append(table1!) self.titleArr.append(title2) self.tableViewArr.append(table2) self.getHotelMessage(3, code: countryIdOrProviceId) return } self.case3(citylist!) if self.tableViewArr.count >= addressID { let tableView1 = self.tableViewArr[addressID - 1] tableView1.reloadData() } }) { log.debug("失败了") } default: break } } func case1(_ contrylist: [DropDownData]) { if contrylist.count > 0{ self.countryMarr.removeAll() self.countryMarr = contrylist }else{ log.debug("没有对应省分") // self.tapBtnAndcancelBtnClick() } } func case2(_ provincelist:[DropDownData]) { self.provinceArr.removeAll() self.provinceArr = provincelist if self.tableViewArr.count >= 2{ self.titleArr[1] = "Please choose" if self.tableViewArr.count > 2 { let conunt = self.tableViewArr.count - 2 for _ in 0.. 0{ self.cityArr.removeAll() self.cityArr = citylist if self.tableViewArr.count >= 3{ self.titleArr[2] = "Please choose" if tableViewArr.count > 3 { self.titleArr.removeLast() self.tableViewArr.removeLast() }else { for tableView in self.tableViewArr { if tableView.tag == 1000000 + 3 { let tableView2 = UITableView(frame: CGRect(x: 0, y: 0, width: KSCREENWIDTH, height: 200), style: .plain) tableView2.separatorStyle = .none tableView2.tag = 1000000 + 2 self.tableViewArr[2] = tableView2 } else { } } } }else{ let tableView2 = UITableView(frame: CGRect(x: 0, y: 0, width: KSCREENWIDTH, height: 200), style: .plain) tableView2.separatorStyle = .none tableView2.tag = 1000000 + 2 self.tableViewArr.append(tableView2) self.titleArr.append("Please choose") } self.setupAllTitle(2) }else{ //没有对应市 if self.tableViewArr.count > 2{ self.titleArr.removeLast() self.tableViewArr.removeLast() } self.setupAllTitle(1) // self.tapBtnAndcancelBtnClick() } } func hotelCase(_ addressID :Int,hotellist: [DropDownData]) { switch addressID { case 2: self.hotelArr.removeAll() self.hotelArr = hotellist if self.tableViewArr.count >= 2{ self.titleArr[1] = "Please choose" if self.tableViewArr.count > 2 { for i in 0..= 3{ self.titleArr[2] = "Please choose" if tableViewArr.count > 3 { self.titleArr.removeLast() self.tableViewArr.removeLast() }else{ for tableView in self.tableViewArr { if tableView.tag == 1000000 + 2 { let tableView2 = UITableView(frame: CGRect(x: 0, y: 0, width: KSCREENWIDTH, height: 200), style: .plain) tableView2.separatorStyle = .none tableView2.tag = 1000000 + 3 self.tableViewArr[2] = tableView2 } else { } } } }else{ let tableView2 = UITableView(frame: CGRect(x: 0, y: 0, width: KSCREENWIDTH, height: 200), style: .plain) tableView2.separatorStyle = .none tableView2.tag = 1000000 + 3 self.tableViewArr.append(tableView2) self.titleArr.append("Please choose") } self.setupAllTitle(2) case 4 : self.hotelArr.removeAll() self.hotelArr = hotellist if self.tableViewArr.count > 3{ self.titleArr[3] = "Please choose" }else{ let tableView2 = UITableView(frame: CGRect(x: 0, y: 0, width: KSCREENWIDTH, height: 200), style: .plain) tableView2.separatorStyle = .none tableView2.tag = 1000000 + 3 self.tableViewArr.append(tableView2) self.titleArr.append("Please choose") } self.setupAllTitle(3) default: break } } func case4(_ hotellist:[DropDownData]) { if hotellist.count > 0 { self.hotelArr.removeAll() self.hotelArr = hotellist if self.provinceArr.count == 0 { if self.tableViewArr.count >= 2 { self.titleArr[1] = "Please choose" if self.tableViewArr.count > 2 { let conunt = self.tableViewArr.count - 2 for _ in 0.. 0 && self.cityArr.count == 0 { if self.tableViewArr.count >= 3{ self.titleArr[2] = "Please choose" if tableViewArr.count > 3 { self.titleArr.removeLast() self.tableViewArr.removeLast() } }else{ let tableView2 = UITableView(frame: CGRect(x: 0, y: 0, width: KSCREENWIDTH, height: 200), style: .plain) tableView2.separatorStyle = .none tableView2.tag = 1000000 + 3 self.tableViewArr.append(tableView2) self.titleArr.append("Please choose") } self.setupAllTitle(2) return }else{ if self.tableViewArr.count > 3{ self.titleArr[3] = "Please choose" }else{ let tableView2 = UITableView(frame: CGRect(x: 0, y: 0, width: KSCREENWIDTH, height: 200), style: .plain) tableView2.separatorStyle = .none tableView2.tag = 1000000 + 3 self.tableViewArr.append(tableView2) self.titleArr.append("Please choose") } self.setupAllTitle(3) return } } } } /* */