1. import UIKit
  2.  
  3. //UIPickerView 的委托协议是 UIPickerViewDelegate,数据源是 UIPickerViewDataSource。我们需要在视图控制器中声明实现 UIPiekerViewDelegate 和 UIPickerViewDataSource 协议。
  4. class RootViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
  5. var label: UILabel!
  6. var pickerView: UIPickerView!
  7.  
  8. var pickerData:[String: [String]] = ["放假":["写代码","玩游戏","泡妹子"],"旅游":["马尔代夫","火星","迪拜","月球"],"上班":["加班","不加班"]] //保存全部数据
  9. var pickerProvincesData: [String] = ["放假","旅游","上班"] //第一级数据
  10. var pickerCitiesData: [String] = ["写代码","玩游戏","泡妹子"]//第二级数据
  11.  
  12. override func viewDidLoad() {
  13. super.viewDidLoad()
  14. // 创建视图
  15. let screen = UIScreen.main.bounds
  16. // 设置 根视图背景色
  17. self.view.backgroundColor = UIColor.white
  18.  
  19. // 选择器
  20. let pickerViewWidth:CGFloat =
  21. let pickerViewHeight:CGFloat =
  22. self.pickerView = UIPickerView(frame: CGRect(x:, y: ,width: pickerViewWidth, height: pickerViewHeight))
  23. //因为该Controller中实现了UIPickerViewDataSource接口所以将dataSource设置成自己
  24. self.pickerView.dataSource = self
  25. //将delegate设置成自己
  26. self.pickerView.delegate = self
  27. self.view.addSubview(self.pickerView)
  28.  
  29. // 添加标签
  30. let labelwidth:CGFloat =
  31. let labelheight:CGFloat =
  32. let labelTopView:CGFloat =
  33. self.label = UILabel(frame: CGRect(x:(screen.size.width - labelwidth)/, y: labelTopView, width: labelwidth, height: labelheight))
  34. self.label.text = "Label"
  35. // 字体左右居中
  36. self.label.textAlignment = .center
  37. self.view.addSubview(self.label)
  38.  
  39. // button 按钮
  40. let button = UIButton(type: .system)
  41. button.setTitle("Button", for: UIControlState.normal)
  42. let buttonwidth:CGFloat =
  43. let buttonheight:CGFloat =
  44. let buttonTopView:CGFloat =
  45. button.frame = CGRect(x: (screen.size.width - buttonwidth)/, y: buttonTopView, width: buttonwidth, height: buttonheight)
  46. //事件
  47. button.addTarget(self, action: #selector(onclick(_:)), for: .touchUpInside)
  48. self.view.addSubview(button)
  49.  
  50. }
  51. //设置选择框的总列数,继承于UIPickViewDataSource协议
  52. func numberOfComponents(in pickerView: UIPickerView) -> Int {
  53. return
  54. }
  55. //设置选择框的总行数,继承于UIPickViewDataSource协议
  56. func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
  57. //总行数设置为数据源的总长度。component :为0 表示第一列,1 表示第二列
  58. //根据不同的数据源设置不同的个数
  59. if(component == ){
  60. return self.pickerProvincesData.count
  61. }else{
  62. return self.pickerCitiesData.count
  63. }
  64. }
  65. //设置选项框各选项的内容,继承于UIPickViewDelegate协议
  66. func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?{
  67. if(component == ){ //选择第一级数据
  68. return self.pickerProvincesData[row]
  69. }
  70. else{//选择第二级数据
  71. return self.pickerCitiesData[row]
  72. }
  73. }
  74. //选择控件的事件选择
  75. func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
  76. if(component == ){
  77. //记录用户选择的值
  78. let selectedProvince = self.pickerProvincesData[row] as String
  79. // 根据第一列选择的值,获取第二列数据
  80. self.pickerCitiesData = self.pickerData[selectedProvince]!
  81. //刷新第二列的数据源
  82. self.pickerView.reloadComponent()
  83. //刷新数据源后将第二组数据转到下标为0,并且开启动画效果
  84. self.pickerView.selectRow(, inComponent: , animated: true)
  85. }
  86. }
  87. //设置每行选项的高度
  88. func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
  89. return 45.0
  90. }
  91. // 获取值
  92. @objc func onclick(_ sender: AnyObject) {
  93. //获得2列选取值的下标
  94. let row1 = self.pickerView.selectedRow(inComponent: )
  95. let row2 = self.pickerView.selectedRow(inComponent: )
  96. // 根据下标获取值
  97. let selected1 = self.pickerProvincesData[row1] as String
  98. let selected2 = self.pickerCitiesData[row2] as String
  99. //拼接值
  100. let title = String(format: "%@, %@", selected1, selected2)
  101. self.label.text = title
  102. }
  103. }

swift-UIPickerView(选择控件)的更多相关文章

  1. Swift - 日期选择控件(UIDatePicker)的用法

    1,使用storyboard创建日期选择控件 首先我们将一个UIDatePicker控件和一个按钮直接添加到Main.Storyboard上.该按钮是为了点击时弹出提示框显示当前选择的日期和时间. 同 ...

  2. Swift - 分段选择控件(UISegmentedControl)的用法

    1,选择控件的创建,并监听控件选择值 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 class ViewController: UIVie ...

  3. Windows Phone 8.1 新特性 - 控件之列表选择控件

    本篇我们来介绍Windows Phone 8.1 新特性中的列表选择控件. 在Windows Phone 8 时代,大家都会使用 LongListSelector 来实现列表选择控件,对数据进行分组显 ...

  4. SNF开发平台WinForm之三-开发-单表选择控件创建-SNF快速开发平台3.3-Spring.Net.Framework

    3.1运行效果: 3.2开发实现: 3.2.1 这个开发与第一个开发操作步骤是一致的,不同之处就是在生成完代码之后,留下如下圈红程序,其它删除. 第一个开发地址:开发-单表表格编辑管理页面 http: ...

  5. 用c/c++混合编程方式为ios/android实现一个自绘日期选择控件(一)

    本文为原创,如有转载,请注明出处:http://www.cnblogs.com/jackybu 前言 章节: 1.需求描述以及c/c++实现日期和月历的基本操作 2.ios实现自绘日期选择控件 3.a ...

  6. js 跨域的问题 (同一个主域名不同的二级域名下的跨域问题) 解决 WdatePicker.js my97日期选择控件

    例如域名是  a.xx.com  和 b.xx.com    如果一个页面中引入多个iframe,要想能够操作所有iframe,必须都得设置相同domain. 如果iframe的时候  a包含b  为 ...

  7. JQuery好用的日期选择控件 DatePicker

    近期发现一个很好的基于JQ的前端UI日期选择控件Jquery.DatePicker.js 下载地址:jquery.DatePIcker.js 演示地址:DatePicker - 基于jQuery 1. ...

  8. [Ext JS 4] 实战之 带week(星期)的日期选择控件(三)

    前言 在 [Ext JS 4] 实战之 带week(星期)的日期选择控件(二) 的最后,有提到一个解决方案. 不过这方案有一个条件  ==> “2. 每年的周数从(1-52), 如果超过52 周 ...

  9. 使用sui实现的选择控件【性别、日期、省市级联】

    使用sui mobile做的选择控件,其中sm.js有修改,增加自定义api,详情请看index.html的注释,不多说了,上代码 <!DOCTYPE html> <html> ...

随机推荐

  1. [R] [Johns Hopkins] R Programming -- week 4

    #Generating normal distribution (Pseudo) random number x<-rnorm(10) x x2<-rnorm(10,2,1) x2 set ...

  2. flagr a/b 测试特性开关&&微服务动态配置工具

    flagr a/b 测试特性开关&&微服务动态配置工具 简单运行 docker docker run -it -p 18000:18000 checkr/flagr 运行界面 说明 参 ...

  3. KiCad 一款强大的 BOM 和 装配图生成插件

    KiCad 一款强大的 BOM 和 装配图生成插件 可以生成 BOM 和在线的图形. https://github.com/openscopeproject/InteractiveHtmlBom In ...

  4. 2018-2019-2 网络对抗技术 20165308 Exp3 免杀原理与实践

    2018-2019-2 网络对抗技术 20165308 Exp3 免杀原理与实践 实践内容(3.5分) 1.1 正确使用msf编码器(0.5分),msfvenom生成如jar之类的其他文件(0.5分) ...

  5. redis 批量删除 keys

    #!/bin/bash redis_list=("192.168.252.174:7000" "192.168.252.174:7001" "192. ...

  6. 19.2 MEMORY CONTROLLER

    在存储控制器的BANKCONTROLREGISTER(BANKCONn: GCS6-nGCS7)表中:中文翻译各个寄存器的位出现错误: 原文中正确的表述见下图:

  7. tcpdump+wireshark抓包分析

    上一篇文章中,我们介绍了tcpdump如何抓包. tcpdump是命令行下便捷的抓包和分析工具,但使用方式不够友好, wireshark是带图形化界面的抓包和分析工具,操作简便,但需要主机有显示器. ...

  8. jQuery: 判断from表单是否修改

    <script> $(function() { $("#myform :input").change(function(){ $("#myform" ...

  9. osx免驱网卡推荐

    1. 单频2.4G芯片为Realtek RTL8188cu, RTL8192cu,都可以用,如TP-Link TL-WN821N.TP-Link TL-WN823N等等:2. 单频2.4G芯片为Med ...

  10. Redis类的源码使用

    $redis = new Redis(); //连接redis服务器 $redis->connect('127.0.0.1', '6379'); $key = "key"; ...