import UIKit

//UIPickerView 的委托协议是 UIPickerViewDelegate,数据源是 UIPickerViewDataSource。我们需要在视图控制器中声明实现 UIPiekerViewDelegate 和 UIPickerViewDataSource 协议。
class RootViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
var label: UILabel!
var pickerView: UIPickerView! var pickerData:[String: [String]] = ["放假":["写代码","玩游戏","泡妹子"],"旅游":["马尔代夫","火星","迪拜","月球"],"上班":["加班","不加班"]] //保存全部数据
var pickerProvincesData: [String] = ["放假","旅游","上班"] //第一级数据
var pickerCitiesData: [String] = ["写代码","玩游戏","泡妹子"]//第二级数据 override func viewDidLoad() {
super.viewDidLoad()
// 创建视图
let screen = UIScreen.main.bounds
// 设置 根视图背景色
self.view.backgroundColor = UIColor.white // 选择器
let pickerViewWidth:CGFloat =
let pickerViewHeight:CGFloat =
self.pickerView = UIPickerView(frame: CGRect(x:, y: ,width: pickerViewWidth, height: pickerViewHeight))
//因为该Controller中实现了UIPickerViewDataSource接口所以将dataSource设置成自己
self.pickerView.dataSource = self
//将delegate设置成自己
self.pickerView.delegate = self
self.view.addSubview(self.pickerView) // 添加标签
let labelwidth:CGFloat =
let labelheight:CGFloat =
let labelTopView:CGFloat =
self.label = UILabel(frame: CGRect(x:(screen.size.width - labelwidth)/, y: labelTopView, width: labelwidth, height: labelheight))
self.label.text = "Label"
// 字体左右居中
self.label.textAlignment = .center
self.view.addSubview(self.label) // button 按钮
let button = UIButton(type: .system)
button.setTitle("Button", for: UIControlState.normal)
let buttonwidth:CGFloat =
let buttonheight:CGFloat =
let buttonTopView:CGFloat =
button.frame = CGRect(x: (screen.size.width - buttonwidth)/, y: buttonTopView, width: buttonwidth, height: buttonheight)
//事件
button.addTarget(self, action: #selector(onclick(_:)), for: .touchUpInside)
self.view.addSubview(button) }
//设置选择框的总列数,继承于UIPickViewDataSource协议
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return
}
//设置选择框的总行数,继承于UIPickViewDataSource协议
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
//总行数设置为数据源的总长度。component :为0 表示第一列,1 表示第二列
//根据不同的数据源设置不同的个数
if(component == ){
return self.pickerProvincesData.count
}else{
return self.pickerCitiesData.count
}
}
//设置选项框各选项的内容,继承于UIPickViewDelegate协议
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?{
if(component == ){ //选择第一级数据
return self.pickerProvincesData[row]
}
else{//选择第二级数据
return self.pickerCitiesData[row]
}
}
//选择控件的事件选择
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if(component == ){
//记录用户选择的值
let selectedProvince = self.pickerProvincesData[row] as String
// 根据第一列选择的值,获取第二列数据
self.pickerCitiesData = self.pickerData[selectedProvince]!
//刷新第二列的数据源
self.pickerView.reloadComponent()
//刷新数据源后将第二组数据转到下标为0,并且开启动画效果
self.pickerView.selectRow(, inComponent: , animated: true)
}
}
//设置每行选项的高度
func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
return 45.0
}
// 获取值
@objc func onclick(_ sender: AnyObject) {
//获得2列选取值的下标
let row1 = self.pickerView.selectedRow(inComponent: )
let row2 = self.pickerView.selectedRow(inComponent: )
// 根据下标获取值
let selected1 = self.pickerProvincesData[row1] as String
let selected2 = self.pickerCitiesData[row2] as String
//拼接值
let title = String(format: "%@, %@", selected1, selected2)
self.label.text = title
}
}

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. centos 终端字体错位个别字母中间有间隔的解决

    问题描述: linux系统:centos 终端:图形界面终端,通过startx启动 现象:通过终端输入的字体有重叠,字母之间的间隔也很大.由于字体安装不正确导致. 解决方法:通过下面字体的安装命令可以 ...

  2. 引擎设计跟踪(九.14.3) deferred shading 准备

    目前做的一些准备工作 1.depth prepass for forward shading. 做depth prepass的原因是为了完善渲染流程, 虽然架构上支持多个pass, 但实际上从来没有测 ...

  3. 请用java解析下xml

    Java   XML简介 XML(EXtensible Markup Language)  可扩展标记语言 可以说是一个文本文件 作用数交互  配置应用程序 Xml解析技术 三种方式 Dom 文档数据 ...

  4. Linux df -h空间显示不正确

    今天发现一个测试数据库磁盘空间快满了,准备将几个不再用的表空间删除.通过以下命令删除表空间内容及数据文件. drop tablespace tablespace_name including cont ...

  5. Oracle报错TNS-12532: TNS:invalid argument

    今天一个同事遇到了一个oracle问题,在数据库本机通过sqlplus登录sys用户时报TNS-12532: TNS:invalid argument,这个错误. 造成这个错误的原因主要有三个,一般排 ...

  6. CentOS7查看和关闭防火墙

    CentOS 7.0默认使用的是firewall作为防火墙 1.查看防火墙状态 firewall-cmd --state2.停止firewall systemctl stop firewalld.se ...

  7. C#集合类型大揭秘 【转载】

    [地址]https://www.cnblogs.com/songwenjie/p/9185790.html 集合是.NET FCL(Framework Class Library)的重要组成部分,我们 ...

  8. a标签通过浏览器下载远程图片

    <a href="http://fooku.oss-cn-hongkong.aliyuncs.com/image/store/2nblHVyB6cWyBI7Aq2SEp6aZRBlui ...

  9. 定时任务模块 schedule

    # coding:utf-8 from learning_python.Telegram_push.check_hardware import check_cpu import schedule im ...

  10. servlet下载文件

    package myjava.cn; import java.io.FileInputStream; import java.io.IOException; import java.io.InputS ...