
image.png
代码:
import UIKit
class ViewController: UIViewController ,UIPickerViewDelegate,UIPickerViewDataSource {
var label: UILabel!
var pickerView: UIPickerView!
var pickerData :NSDictionary! //保存全部数据
var pickerProvincesData: NSArray! //当前的省数据
var pickerCitiesData: NSArray! //当前省下面的市数据
override func viewDidLoad() {
super.viewDidLoad()
let plistPath = Bundle.main.path(forResource: "provinces_cities", ofType: "plist")
let dict = NSDictionary(contentsOfFile: plistPath!) //获取属性列表文件名中的全部数据
self.pickerData = dict
//省份名数据
self.pickerProvincesData = self.pickerData.allKeys as NSArray
//默认取出第一个省的所有市的数据
let seletedProvince = self.pickerProvincesData[0] as! String
self.pickerCitiesData = self.pickerData[seletedProvince] as! NSArray
let screen = UIScreen.main.bounds
//1.选择器
let pickerViewWidth: CGFloat = 320
let pickerViewHeight: CGFloat = 162
self.pickerView = UIPickerView(frame: CGRect(x: 0, y: 0, width: pickerViewWidth, height: pickerViewHeight))
self.view.addSubview(pickerView)
//2. 添加标签
let labelWidth: CGFloat = 200
let labelHeight: CGFloat = 21
let labelTopView: CGFloat = 273
self.label = UILabel(frame: CGRect(x:0 , y: labelTopView, width: labelWidth, height: labelHeight))
self.label.text = "Label"
self.label.textAlignment = .center
self.view.addSubview(self.label)
//3.button代码实现
let button = UIButton(type: UIButton.ButtonType.system)
button.setTitle("OK", for: UIControl.State.normal)
let buttonWidth: CGFloat = 46
let buttonheight: CGFloat = 30
let buttonTopView: CGFloat = 374
button.frame = CGRect(x: (screen.size.width - buttonWidth)/2, y: buttonTopView, width: buttonWidth, height: buttonheight)
//addTarget,第一个参数是事件处理者,第二个参数是选择器类型,它指向事件处理方法,第三个参数是事件.
button.addTarget(self, action: #selector(onclick(sender:)), for: UIControl.Event.touchUpInside)
self.view.addSubview(button)
//将委托和数据源的实现对象ViewController分配给UIPickerView的委托属性delegate和数据源属性dataSource
self.pickerView.dataSource = self
self.pickerView.delegate = self
}
@objc func onclick(sender:AnyObject){
let row1 = self.pickerView.selectedRow(inComponent: 0)
let row2 = self.pickerView.selectedRow(inComponent: 1)
let selected1 = self.pickerProvincesData[row1] as! String
let selected2 = self.pickerCitiesData[row2] as! String
let title = String(format:"%@ , %@市" , selected1 , selected2)
self.label.text = title
}
//实现数据源协议
func numberOfComponents(in pickerView: UIPickerView) -> Int {
//选择器拨轮的数目
return 2
}
//选择器某个拨轮的行数
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if(component == 0){
//第一个拨轮省份个数
return self.pickerProvincesData.count
} else {
//第二个拨轮城市个数
return self.pickerCitiesData.count
}
}
//实现委托协议
//为选择器中某个拨轮的行提供显示数据
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if (component == 0) {
return self.pickerProvincesData[row] as? String
} else {
return self.pickerCitiesData[row] as? String
}
}
//选择选择器的某个拨轮中的某行时调用
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if (component == 0){
let seletedProvince = self.pickerProvincesData[row] as! String
self.pickerCitiesData = self.pickerData[seletedProvince] as! NSArray
self.pickerView.reloadComponent(1)
}
}
}

image.png