swift中UIPickerView的使用

来源:互联网 发布:烘干法测定含水量数据 编辑:程序博客网 时间:2024/05/16 09:39

https://github.com/potato512/SYSwiftLearning


示例代码如下:

1、参数定义

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. let width:CGFloat = (UIScreen.mainScreen().bounds.size.width / 3.0)  
  2. var label:UILabel?  
  3. var addressArray:Array<AnyObject>?  
  4. var cityArray:Array<AnyObject>?  
  5. var areaArray:Array<AnyObject>?  
  6.       
  7. var textSelected1:String!  
  8. var textSelected2:String!  
  9. var textSelected3:String!  

2、数据源模拟

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. // 数据  
  2. self.loadAddress()  
  3.   
  4. // MARK: - 数据  
  5. func loadAddress()  
  6. {  
  7.         // 广西  
  8.         let cityArea011 = ["cityName":"南宁市","cityArea":["南宁市","隆安县","武鸣县","马山县","宾阳县","横县","芭乐县","上林县"]]  
  9.         let cityArea012 = ["cityName":"百色市","cityArea":["百色市","隆林各族自治县","西林县","田林县","乐业县","凌云县","田阳县","田东县","平果县","德宝县","靖西县","那坡县"]]  
  10.         let cityArea013 = ["cityName":"桂林市","cityArea":["桂林市","龙胜各簇自治县","资源县","全州县","兴安县","灵川县","灌阳县","恭城瑶族自治县","平乐县","荔浦县","阳朔县","临桂县","永福县"]]  
  11.         let provinceCity01 = ["provinceName":"广西省","provinceCity":[cityArea011,cityArea012,cityArea013]]  
  12.         // 广东  
  13.         let cityArea021 = ["cityName":"梅州市","cityArea":["梅江区","梅县","蕉岭县","大埔县","丰顺县","平远县","兴宁市"]]  
  14.         let cityArea022 = ["cityName":"广州市","cityArea":["越秀","海珠","荔湾","天河","白云","黄埔","南沙","萝岗"]]  
  15.         let cityArea023 = ["cityName":"深圳市","cityArea":["龙岗区","宝安区","光明新区","坪山新区","罗湖区","福田区","盐田区","南山区"]]  
  16.         let cityArea024 = ["cityName":"惠州市","cityArea":["惠城区","惠东县","惠阳市","龙门县","博罗县"]]  
  17.         let provinceCity02 = ["provinceName":"广东省","provinceCity":[cityArea021,cityArea022,cityArea023,cityArea024]]  
  18.           
  19.         self.addressArray = [provinceCity01, provinceCity02]  
  20.           
  21.         self.cityArray = []  
  22.         self.areaArray = []  
  23. }  

3、picker view使用

3-1、初始化定义

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. // 实例化(注:UIPickerView的宽高默认分别是屏幕宽度、216的高度)  
  2. let pickerview = UIPickerView()  
  3. print(pickerview)  
  4. self.view.addSubview(pickerview)  
  5. pickerview.backgroundColor = UIColor.greenColor()  
  6.           
  7. // 设置代理(注意添加代理协议,实现代理方法)  
  8. pickerview.dataSource = self  
  9. pickerview.delegate = self  
  10.           
  11. // 设置选择框的默认值  
  12. pickerview.selectRow(0,inComponent:0,animated:true)  
  13. pickerview.selectRow(0,inComponent:1,animated:true)  
  14. pickerview.selectRow(0,inComponent:2,animated:true)  
  15.           
  16. // 刷新数据  
  17. // 刷新全部数据  
  18. pickerview.reloadAllComponents()  
  19. // 刷新某列数据  
  20. // pickerview.reloadComponent(1)  

3-2、添加协议

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {  
  2.   
  3. ....  
  4. }  

3-3、代理方法实现

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. // MARK: - UIPickerViewDataSource, UIPickerViewDelegate  
  2. // MARK: UIPickerViewDataSource  
  3. func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int  
  4. {  
  5.         // 选择框列数  
  6.         return 3  
  7. }  
  8.       
  9. func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int  
  10. {  
  11.         // 每个选择框的行数  
  12.         if 0 == component  
  13.         {  
  14.             // 第一列  
  15.             let count = self.addressArray!.count  
  16.             return count  
  17.         }  
  18.         else if 1 == component  
  19.         {  
  20.             // 第二列  
  21.             let count = self.cityArray!.count  
  22.             return count  
  23.         }  
  24.         else if 2 == component  
  25.         {  
  26.             // 第三列  
  27.             let count = self.areaArray!.count  
  28.             return count  
  29.         }  
  30.           
  31.         return 0  
  32. }  
  33.       
  34. // MARK: UIPickerViewDelegate  
  35. func pickerView(pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat  
  36. {  
  37.         // 每个选择框的行宽  
  38.         return width  
  39. }  
  40.       
  41. func pickerView(pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat  
  42. {  
  43.         // 每个选择框的行高  
  44.         return 40.0  
  45. }  
  46.       
  47. func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?  
  48. {  
  49.         // 每个选择框每行的显示内容  
  50.         if 0 == component  
  51.         {  
  52.             // 第一列  
  53.             let dictProvince = self.addressArray![row]  
  54.             let province:String! = dictProvince.objectForKey("provinceName") as! String  
  55.             return province  
  56.         }  
  57.         else if 1 == component  
  58.         {  
  59.             // 第二列  
  60.             let dict = self.cityArray![row]  
  61.             let city:String! = dict.objectForKey("cityName") as! String  
  62.             return city  
  63.         }  
  64.         else if 2 == component  
  65.         {  
  66.             // 第三列  
  67.             let area:String! = self.areaArray![row] as! String  
  68.             return area  
  69.         }  
  70.           
  71.         return nil  
  72. }  
  73.       
  74. func pickerView(pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString?  
  75. {  
  76.         // 每个选择框每行的显示副文本内容  
  77.         return nil  
  78. }  
  79.       
  80. func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView  
  81. {  
  82.         // 每个选择框每行自定义视图  
  83.         let label = UILabel(frame: CGRectMake(0.0, 0.0, width, 40.0))  
  84.         label.backgroundColor = UIColor.orangeColor()  
  85.         label.textAlignment = NSTextAlignment.Center  
  86.           
  87.         if 0 == component  
  88.         {  
  89.             // 第一列  
  90.             let dict = self.addressArray![row]  
  91.             let province:String! = dict.objectForKey("provinceName") as! String  
  92.             label.text = province  
  93.         }  
  94.         else if 1 == component  
  95.         {  
  96.             // 第二列  
  97.             let dict = self.cityArray![row]  
  98.             let city:String! = dict.objectForKey("cityName") as! String  
  99.             label.text = city  
  100.         }  
  101.         else if 2 == component  
  102.         {  
  103.             // 第三列  
  104.             let area:String! = self.areaArray![row] as! String  
  105.             label.text = area  
  106.         }  
  107.           
  108.         return label  
  109. }  
  110.       
  111. func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)  
  112. {  
  113.         // 每个选择框每行被选中的值  
  114.         print(component, row)  
  115.     
  116.         if 0 == component  
  117.         {  
  118.             // 第一列时的行数  
  119. //            textSelected1 = String("1列 \(row) 行")  
  120.               
  121.             let dict = self.addressArray![row]  
  122.             textSelected1 = dict.objectForKey("provinceName") as? String  
  123.               
  124.             // 第二、三列关联改变  
  125.             self.cityArray! = dict["provinceCity"] as! Array  
  126.             pickerView.reloadComponent(1)  
  127.             pickerView.selectRow(0, inComponent: 1, animated: true)  
  128.             let dict2 = self.cityArray![0]  
  129.             textSelected2 = dict2.objectForKey("cityName") as! String  
  130.               
  131.             let dict3 = self.cityArray![0]  
  132.             self.areaArray! = dict3["cityArea"] as! Array  
  133.             pickerView.reloadComponent(2)  
  134.             pickerView.selectRow(0, inComponent: 2, animated: true)  
  135.             textSelected3 = self.areaArray![0] as! String  
  136.         }  
  137.         else if 1 == component  
  138.         {  
  139.             // 第二列时的行数  
  140. //            textSelected2 = String("2列 \(row) 行")  
  141.               
  142.             let dict = self.cityArray![row]  
  143.             textSelected2 = dict.objectForKey("cityName") as! String  
  144.               
  145.             // 第三列关联改变  
  146.             self.areaArray! = dict["cityArea"] as! Array  
  147.             pickerView.reloadComponent(2)  
  148.             pickerView.selectRow(0, inComponent: 2, animated: true)  
  149.             textSelected3 = self.areaArray![0] as! String  
  150.         }  
  151.         else if 2 == component  
  152.         {  
  153.             // 第三列时的行数  
  154. //            textSelected3 = String("3列 \(row) 行。")  
  155.               
  156.             textSelected3 = self.areaArray![row] as! String  
  157.         }  
  158.         let text = String("你选择了:\(textSelected1),\(textSelected2),\(textSelected3)")  
  159.         self.label!.text = text  
  160. }  

4、显示选择结果

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. self.label = UILabel(frame: CGRectMake(10.0, (CGRectGetHeight(self.view.bounds) - 10.0 - 40.0), (CGRectGetWidth(self.view.bounds) - 10.0 * 2), 40.0))  
  2. self.view.addSubview(self.label!)  
  3. self.label!.backgroundColor = UIColor.yellowColor()  
  4. self.label!.textColor = UIColor.redColor()  
  5. self.label!.autoresizingMask = UIViewAutoresizing.FlexibleTopMargin  

5、注意事项

(1)标题内容"func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { }"设置与自定义视图"func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView { }"不能同时设置,否则只有自定义视图有效。

0 0
原创粉丝点击