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. P2930 [USACO09HOL]假期绘画Holiday Painting

    线段树水题,考虑到只有15列,所以我们对于每一列,我们都去维护一个线段树. 现在来考虑一下修改操作,因为每次修改的时候,我们都是将黑的改成白的,白的改成黑的,所以我们对线段树的每个节点维护当前这段区间 ...

  2. windows下Redis的安装和使用

    1.要安装Redis,首先要获取安装包.Windows的Redis安装包需要到以下GitHub链接找到.链接:https://github.com/MSOpenTech/redis.打开网站后,找到R ...

  3. Python3源码学习-requests

    源码:https://github.com/small99/AutoLink 本地安装包 version.txt记录版本号. 通过requests GET最新git上版本号. import codec ...

  4. Day 18 常用模块(二)

    一.随机数:RANDOM 1.(0,1)小数:random.random() 2.[1,10]整数:random.randint(1,10) 3.[1,10)整数:random.randrang(1, ...

  5. Spark分布式编程之全局变量专题【共享变量】

    转载自:http://www.aboutyun.com/thread-19652-1-1.html 问题导读 1.spark共享变量的作用是什么?2.什么情况下使用共享变量?3.如何在程序中使用共享变 ...

  6. 转载----五种开源协议(GPL,LGPL,BSD,MIT,Apache)

    原文地址:https://www.oschina.net/question/54100_9455 五种开源协议(GPL,LGPL,BSD,MIT,Apache) 什么是许可协议? 什么是许可,当你为你 ...

  7. react优缺点

    优点: 1.面向组件,方便组件的复用. 2.从操作dom改为操作state. 缺点: 1.html和javascript较高耦合,不方便分工开发. 2.当一个页面中两处元素组件有相关性时,父组件会非常 ...

  8. SQL脚本--总耗CPU最多的前个SQL --平均耗CPU最多的前个SQL

    --总耗CPU最多的前个SQL SELECT TOP 20 total_worker_time/1000 AS [总消耗CPU 时间(ms)],execution_count [运行次数], qs.t ...

  9. 结合源码浅谈Spring容器与其子容器Spring MVC 冲突问题

    容器是整个Spring 框架的核心思想,用来管理Bean的整个生命周期. 一个项目中引入Spring和SpringMVC这两个框架,Spring是父容器,SpringMVC是其子容器,子容器可以看见父 ...

  10. 解除Portal for ArcGIS与ArcGIS Server的联合

    将ArcGIS Server站点添加到Portal中,可以实现ArcGIS Server站点的单点登录特性,并可以与Portal共享Server站点发布的内容,同时通过将联合服务器注册为托管服务器后还 ...