swift 城市选择三级联动选择器

//项目

import UIKit

import SnapKit

class ChangeHomeAddressVC: BaseViewController,UIPickerViewDelegate,UIPickerViewDataSource{

var pickerDic:NSDictionary!

var provinceArray:NSArray!

var cityArray:NSArray!

var townArray:NSArray!

var selectedArray:NSArray!

override func viewDidLoad() {

super.viewDidLoad()

self.navigationItem.title = "更改家庭地址"

//右边导航键

self.navigationItem.rightBarButtonItem = UIBarButtonItem.init(title: "保存", style: UIBarButtonItemStyle.Plain, target: self, action: #selector(ChangeHomeAddressVC.changeAddressByPicker))

prepareUI()

addPickView()

getPickerData()

}

//屏幕点击事件

override func touchesBegan(touches: Set, withEvent event: UIEvent?) {

self.view.endEditing(true)

}


//点击了改变地址的view触发事件

func changeAddress() {

print("点击了改变地址的view")

if cityPickView.frame.origin.y < UIScreen.mainScreen().bounds.height - 204{

print("点击过了")

}else {

likeToolView.hidden = false

cityPickView.hidden = false

UIView.animateWithDuration(1.25, delay: 0.1, usingSpringWithDamping: 0.5, initialSpringVelocity: 5, options: UIViewAnimationOptions(rawValue:0), animations: {

self.likeToolView.transform = CGAffineTransformTranslate(self.likeToolView.transform, 0, -204)

self.cityPickView.transform = CGAffineTransformTranslate(self.cityPickView.transform , 0, -204)

}, completion: nil)

}

}

//MARK:  -视图

func prepareUI() {

self.view.addSubview(topView)

topView.addSubview(labelView)

labelView.addSubview(addressLabel)

labelView.addSubview(cityLabel)

labelView.addSubview(districtLabel)

topView.addSubview(fengGeLine)

topView.addSubview(AddressTextField)

labelView.snp_makeConstraints { (make) in

make.trailing.equalTo(topView.snp_trailing)

make.leading.equalTo(topView.snp_leading)

make.top.equalTo(topView.snp_top)

make.height.equalTo(44)

}

cityLabel.snp_makeConstraints { (make) in

make.centerY.equalTo(addressLabel.snp_centerY)

make.leading.equalTo(addressLabel.snp_trailing).offset(5)

}

districtLabel.snp_makeConstraints { (make) in

make.centerY.equalTo(addressLabel.snp_centerY)

make.leading.equalTo(cityLabel.snp_trailing).offset(5)

}

AddressTextField.snp_makeConstraints { (make) in

make.top.equalTo(fengGeLine.snp_bottom).offset(20)

make.leading.equalTo(fengGeLine.snp_leading)

make.trailing.equalTo(fengGeLine.snp_trailing)

}

fengGeLine.snp_makeConstraints { (make) in

make.top.equalTo(labelView.snp_bottom)

make.leading.equalTo(self.view.snp_leading).offset(10)

make.trailing.equalTo(self.view.snp_trailing).offset(-10)

make.height.equalTo(1)

}

addressLabel.snp_makeConstraints { (make) in

make.top.equalTo(labelView.snp_top).offset(15)

make.leading.equalTo(labelView.snp_leading).offset(10)

}

topView.snp_makeConstraints { (make) in

make.top.equalTo(self.view.snp_top).offset(10)

make.leading.equalTo(self.view.snp_leading)

make.trailing.equalTo(self.view.snp_trailing)

make.height.equalTo(99)

}

}

lazy var topView : UIView = {

let view = UIView()

view.backgroundColor = UIColor.whiteColor()

return view

}()

lazy var labelView : UIView  = {

let view = UIView()

view.backgroundColor = UIColor.whiteColor()

let addressLabelGesture = UITapGestureRecognizer.init(target: self, action: #selector(ChangeHomeAddressVC.changeAddress))

view.addGestureRecognizer(addressLabelGesture)

return view

}()

//省

lazy var addressLabel : UILabel = {

let label = UILabel()

label.text = "省市区"

label.font = UIFont.systemFontOfSize(14)

label.textColor = UIColor.init(red: 165.0/255.0, green: 165.0/255.0, blue: 165.0/255.0, alpha: 1.0)

return label

}()

//市

lazy var cityLabel : UILabel = {

let label =  UILabel()

label.text = " "

label.font = UIFont.systemFontOfSize(14)

label.textColor = UIColor.init(red: 165.0/255.0, green: 165.0/255.0, blue: 165.0/255.0, alpha: 1.0)

return label

}()

//区

lazy var districtLabel : UILabel = {

let label =  UILabel()

label.text = " "

label.font = UIFont.systemFontOfSize(14)

label.textColor = UIColor.init(red: 165.0/255.0, green: 165.0/255.0, blue: 165.0/255.0, alpha: 1.0)

return label

}()

lazy var fengGeLine : UIView = {

let line = UIView()

line.backgroundColor = UIColor.init(red: 240.0/255.0, green: 240.0/255.0, blue: 240.0/255.0, alpha: 1.0)

return line

}()

lazy var AddressTextField : UITextField = {

let text = UITextField()

text.placeholder = "详细地址(请精确房门号)"

text.textColor = UIColor.init(red: 51.0/255.0, green: 51.0/255.0, blue: 51.0/255.0, alpha: 1.0)

return text

}()

override func didReceiveMemoryWarning() {

super.didReceiveMemoryWarning()

// Dispose of any resources that can be recreated.

}

//MARK: -添加地址选择器

func addPickView() {

self.view.addSubview(likeToolView)

likeToolView.addSubview(sureBtn)

likeToolView.addSubview(topViewLine)

likeToolView.addSubview(cancelBtn)

self.view.addSubview(cityPickView)

cityPickView.snp_makeConstraints { (make) in

make.top.equalTo(likeToolView.snp_bottom)

make.leading.equalTo(likeToolView.snp_leading)

make.trailing.equalTo(likeToolView.snp_trailing)

make.height.equalTo(160)

}

cancelBtn.snp_makeConstraints { (make) in

make.centerY.equalTo(likeToolView.snp_centerY)

make.leading.equalTo(likeToolView.snp_leading).offset(20)

}

sureBtn.snp_makeConstraints { (make) in

make.centerY.equalTo(likeToolView.snp_centerY)

make.trailing.equalTo(likeToolView.snp_trailing).offset(-20)

}

likeToolView.snp_makeConstraints { (make) in

make.top.equalTo(self.view.snp_bottom)

make.leading.equalTo(self.view.snp_leading)

make.trailing.equalTo(self.view.snp_trailing)

make.height.equalTo(44)

}

topViewLine.snp_makeConstraints { (make) in

make.top.equalTo(likeToolView.snp_top)

make.leading.equalTo(likeToolView.snp_leading)

make.trailing.equalTo(likeToolView.snp_trailing)

make.height.equalTo(1)

}

}

lazy var likeToolView : UIView = {

let view = UIView()

//        view.backgroundColor = UIColor.init(red: 240.0/255.0, green: 240.0/255.0, blue: 240.0/255.0, alpha: 1.0)

view.backgroundColor = UIColor.whiteColor()

return view

}()

lazy var sureBtn : UIButton = {

let btn = UIButton()

btn.setTitle("确定", forState: UIControlState.Normal)

btn.setTitleColor(UIColor.init(r255: 41, g255: 196, b255: 117), forState: UIControlState.Normal)

btn.addTarget(self, action: #selector(ChangeHomeAddressVC.sureClick), forControlEvents: UIControlEvents.TouchUpInside)

btn.sizeToFit()

return btn

}()

lazy var cancelBtn : UIButton = {

let btn = UIButton()

btn.setTitle("取消", forState: UIControlState.Normal)

btn.setTitleColor(UIColor.init(r255: 165, g255: 165, b255: 165), forState: UIControlState.Normal)

btn.addTarget(self, action: #selector(ChangeHomeAddressVC.cancelBtnClick), forControlEvents: UIControlEvents.TouchUpInside)

return btn

}()

lazy var cityPickView : UIPickerView = {

let view = UIPickerView()

view.delegate = self

view.dataSource = self

//        view.backgroundColor = UIColor.yellowColor()

return view

}()

lazy var topViewLine : UIView = {

let view = UIView()

view.backgroundColor = UIColor.init(r255: 165, g255: 165, b255: 165)

return view

}()

//MARK: -pickerView

func getSubViews(view:UIView) {

for subView in view.subviews {

if subView.subviews.count != 0 {

self.getSubViews(subView)

}else {

if subView.frame.size.height <= 1 {

subView.backgroundColor = UIColor.init(r255: 41, g255: 196, b255: 117)

subView.alpha = 0.5

}

}

}

}

func sureClick() {

print("点击了确认按钮")

UIView.animateWithDuration(1.25, delay: 0.1, usingSpringWithDamping: 0.5, initialSpringVelocity: 5, options: UIViewAnimationOptions(rawValue:0), animations: {

self.likeToolView.hidden = true

self.cityPickView.hidden = true

self.likeToolView.transform = CGAffineTransformIdentity

self.cityPickView.transform = CGAffineTransformIdentity

},completion: nil)

}

func cancelBtnClick() {

print("点击了取消按钮")

UIView.animateWithDuration(1.25, delay: 0.1, usingSpringWithDamping: 0.5, initialSpringVelocity: 5, options: UIViewAnimationOptions(rawValue:0), animations: {

self.addressLabel.text = "省市区"

self.addressLabel.textColor = UIColor.init(red: 165.0/255.0, green: 165.0/255.0, blue: 165.0/255.0, alpha: 1.0)

}) { (_) in

self.likeToolView.hidden = true

self.cityPickView.hidden = true

self.likeToolView.transform = CGAffineTransformIdentity

self.cityPickView.transform = CGAffineTransformIdentity

}

}

//解析plist文件

func getPickerData(){

let path = NSBundle.mainBundle().pathForResource("Address", ofType: "plist")

self.pickerDic = NSDictionary.init(contentsOfFile: path!)

self.provinceArray = self.pickerDic.allKeys

self.selectedArray = self.pickerDic.objectForKey(self.pickerDic.allKeys[0]) as! NSArray

if (self.selectedArray.count > 0){

self.cityArray = self.selectedArray[0].allKeys

}

if (self.cityArray.count > 0){

self.townArray = self.selectedArray[0].objectForKey(self.cityArray[0]) as! NSArray

}

}

//MARK:-pickerView代理方法

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {

return 3

}

func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView {

self.getSubViews(pickerView)

var pickerLabel = UILabel()

pickerLabel = UILabel.init()

//        pickerLabel.font = UIFont(name: "Helvetica", size: 8)

pickerLabel.font = UIFont.systemFontOfSize(16)

pickerLabel.adjustsFontSizeToFitWidth = true

pickerLabel.textAlignment = .Left

pickerLabel.backgroundColor = UIColor.clearColor()

pickerLabel.text = self.pickerView(pickerView, titleForRow: row, forComponent: component)

return pickerLabel

}

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

if (component == 0) {

return self.provinceArray.count;

} else if (component == 1) {

return self.cityArray.count

} else {

return self.townArray.count

}

}

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {

if (component == 0) {

//return [self.provinceArray objectAtIndex:row];

return self.provinceArray[row] as? String

} else if (component == 1) {

return self.cityArray[row] as? String;

} else {

return self.townArray[row] as? String;

}

}

func pickerView(pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat {

if (component == 0) {

return 110;

} else if (component == 1) {

return 100;

} else {

return 110;

}

}

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

if (component == 0) {

self.selectedArray = self.pickerDic.objectForKey(self.provinceArray[row]) as! NSArray

if (self.selectedArray.count > 0) {

self.cityArray = self.selectedArray[0].allKeys

} else {

self.cityArray = nil;

}

if (self.cityArray.count > 0) {

self.townArray = self.selectedArray[0].objectForKey(self.cityArray[0]) as! NSArray

} else {

self.townArray = nil;

}

pickerView.selectRow(0, inComponent: 1, animated: true)

}

pickerView.selectedRowInComponent(1)

pickerView.reloadComponent(1)

pickerView.selectedRowInComponent(2)

if (component == 1) {

if (self.selectedArray.count > 0 && self.cityArray.count > 0) {

self.townArray = self.selectedArray[0].objectForKey(self.cityArray[row]) as! NSArray

} else {

self.townArray = nil;

}

pickerView.selectRow(0, inComponent: 2, animated: true)

}

pickerView.reloadComponent(2)

//        provinceBtn.setTitle(self.provinceArray[self.myPicker.selectedRowInComponent(0)] as? String, forState:.Normal)

addressLabel.text = (self.provinceArray[self.cityPickView.selectedRowInComponent(0)] as? String)!

cityLabel.text =  (self.cityArray[self.cityPickView.selectedRowInComponent(1)] as? String)!

districtLabel.text =  (self.townArray[self.cityPickView.selectedRowInComponent(2)]as? String)!

addressLabel.textColor = UIColor.init(red: 51.0/255.0, green: 51.0/255.0, blue: 51.0/255.0, alpha: 1.0)

cityLabel.textColor = UIColor.init(red: 51.0/255.0, green: 51.0/255.0, blue: 51.0/255.0, alpha: 1.0)

districtLabel.textColor = UIColor.init(red: 51.0/255.0, green: 51.0/255.0, blue: 51.0/255.0, alpha: 1.0)

}

}

效果图如下


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容