选择器(UIPickerView)
Apple提供了两种形式的选择器:日期选择器(UIDatePicker)与自定义选择器(UIPickerView)。
当用户使用日期选择器选定一个时间后,调用datePickerID.date可以直接获得一个NSDate对象,从而可以进行一系列的时间与日期处理。
自定义选择器的使用稍微麻烦点,当你直接从控件栏里拖放Picker View到故事板然后运行,会发现调试器界面空无一物。这是因为UIPickerView必须用代码实现一些协议才能正常显示。而且无法在Attributes Inspector中配置选择器视图的外观。
自定义选择器需要遵守两个协议:数据源协议和委托协议。

1. 数据源协议
数据源协议(UIPickerViewDataSource)用来描述选择器显示多少信息。有下面两个主要方法:
numberOfComponentInPickerView -- 返回选择器的组件数
pickerView:numberOfRowsInComponent -- 返回指定组件包含多少行(不同的输入值)
例如,如果要创建一个选择器,显示两列,其中第一列包含一个可供选择的值,而第二列包含两个,则代码实现如下:
@interface ViewController : UIViewController <UIPickerViewDataSource> - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return ; //显示两列
} - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
if(component==)
{
//如果是第一列,显示1个标签
return ;
}
else
{
//否则显示2个标签
return ;
}
}
2. 委托协议
委托协议(UIPickerViewDelegate)负责创建和使用选择器的系列工作。它负责将合适的数据传递给选择器进行显示,并确定用户是否做出了选择。该协议包含多个方法,但只有两个是必不可少的:
pickerView:titleForRow:forComponent -- 根据指定的组件和行号返回该行的标题,即应向用户显示的字符串
pickerView:didSelectRow:inComponent -- 当用户在选择器中做出选择时,将调用该委托方法,并向它传递用户选择的行号以及用户最后触摸的组件
UIPickView还有一个实例方法- (NSInteger)selectedRowInComponent:(NSInteger)component,用来返回指定列当前选择的行数。通常和pickerView:didSelectRow:inComponent配合使用。想象这样的情况:选择器有两列,第一列是国家,第二列是地区。假如你先转动了国家,这个时候你想得到默认选择的地区,就只能通过selectedRowInComponent来取得。(这个时候didSelectRow得到的row值,是国家那一列的)
@interface ViewController : UIViewController <UIPickerViewDataSource,UIPickerViewDelegate> - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
if(component==)
{
//如果是第一列,显示"中国"
return @"中国";
}
else
{
if(row==)
{
return @"北京";
}
else
{
return @"香港";
}
}
} - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
if(component==)
{
NSLog(@"用户选择了第一列");
}
else
{
NSLog(@"用户选择了第二列"); NSLog(@"用户选择了第%d行",row);
}
}

还有一些非必要,但是也很有用的方法:
pickerView:rowHeightForComponent -- 给指定组件返回(设置)行高,单位为像素
pickerView:widthForComponent -- 给指定组件返回(设置)宽度,单位为像素
pickerView:viewForRow:viewForComponent:ReusingView -- 给指定组件和行号返回相应位置应显示的自定义视图,优先级高于pickerView:titleForRow:forComponent
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component
{
if(component==)
{
//设置第一列的行高
return ;
}
else
{
return ;
}
} - (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component
{
if(component==)
{
//设置第一列的宽度
return ;
}
else
{
return ;
}
} - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
if(component==)
{
//第一列返回一个Label组件
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(, , , )];
label.backgroundColor = [UIColor greenColor];
label.textColor = [UIColor redColor];
label.text = @"First";
return label;
}
else
{
//第二列返回一个图片组件
if(row==)
{
return [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Orange.gif"]];
}
else
{
return [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Strawberry.gif"]];
}
}
}
UIDatePicker有一个实例方法setDate:animated,以编程的方式选择日期。
UIPickerView有一个实例方法selectRow:inComponent:animated,以编程的方式来选择值。
选择器(UIPickerView)的更多相关文章
- UIPickerView选择器的使用方法
UIPickerView是选择列表内容的控件 使用方法与UITableView类似 都需要用array传入数据 用Delegate DataSource中的代理方法实现各种显示功能 @interfac ...
- 【IOS 开发】基本 UI 控件详解 (UIDatePicker | UIPickerView | UIStepper | UIWebView | UIToolBar )
转载注明出处 : http://blog.csdn.net/shulianghan/article/details/50348982 一. 日期选择器 (UIDatePicker) UIDatePic ...
- iOS-自己定义键盘选择器
目标样式: 直接上代码: 遵守协议 <UIPickerViewDataSource,UIPickerViewDelegate> 实现方法 //创建 UITextField 设置setInp ...
- Xcode And iOS9新特性
Xcode And iOS9 1. Xcode7 新特性 > 可直接在真机上运行自己的应用,只需要有苹果账号,无需购买苹果开发者账号. > 可设置在出现 EXC_BAD_ACCESS 错误 ...
- iOS:选择器控件UIPickerView的详解和演示
选择器控件UIPickerView: 功能:它能够创建一个类似于密码锁式的单列或多列的选择菜单,用户可以通过它设置的代理来选择需要菜单中的任意的数据.例如创建日历.字体表(类型.大小.颜色).图库等. ...
- UIPickerView(选择器)
UIPickerView也是一个选择器控件,它比UIDatePicker更加通用,它可以生成单列的选择器,也可生成多列的选择器,而且开发者完全可以自定义选择项的外观,因此用法非常灵活. UIPicke ...
- iOS学习——UIPickerView的实现年月选择器
最近项目上需要用到一个选择器,选择器中的内容只有年和月,而在iOS系统自带的日期选择器UIDatePicker中却只有四个选项如下,分别是时间(时分秒).日期(年月日).日期+时间(年月日时分)以及倒 ...
- iOS:UIPickerView选择器的使用
通过UIPickerView选择器做的一个类似于密码锁的日期时间表 源码如下: #import <UIKit/UIKit.h> @interface ViewController : UI ...
- UIPickerView滚轮选择器视图
//必须实现两个协议 //数据源协议必须实现的两个方法 //选取器的输出借口singlePicker,并在故事版中选择该选取器将dataSource和delegate拖入视图控制器与之关联 //@pr ...
随机推荐
- CF540 C BFS 水
'.'->'X' 前者走后变成后者,后者除了是终点不能再走.初始位置是X很傻的以为这样从初始点走出去后初始位置就变成不能走了,实际上是还能走一次的. 其他就是BFS,路上记得把路变成X就好了 太 ...
- 关于变长数组的一点小想法-C语言定义数组但是数组长度不确定怎么办
很多数据机构,比如栈,链表等,都可以动态分配存储空间 那么数组呢?一般声明时都要指定数组长度,那么数组可以实现动态分配么? 假设数组存的是int型 那么 你先申请10个元素 int* a = (int ...
- jQuery面向对象的写法
定义的写法 //构造函数 function test(){ //construct code } //初始化方法 test.prototype.init = function(){ //init co ...
- Dubbo+Zookeeper+SpringMVC+Maven整合实现微服务项目
互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的.现在核心业务抽取出来,作为独立的服务,使 ...
- sqoop一些语法的使用
参数详细资料 观看这个博客 http://shiyanjun.cn/archives/624.html Sqoop可以在HDFS/Hive和关系型数据库之间进行数据的导入导出,其中主要使用了impor ...
- php常用函数——数组函数
php常用函数——数组函数
- weblogic 配置了ssl
jingyan.baidu.com/article/72ee561abfe531e16138dfb5.html http://blog.sina.com.cn/s/blog_7ffec3e201019 ...
- React 16 源码瞎几把解读 【二】 react组件的解析过程
一.一个真正的react组件编译后长啥样? 我们瞎几把解读了react 虚拟dom对象是怎么生成的,生成了一个什么样的解构.一个react组件不光由若干个这些嵌套的虚拟dom对象组成,还包括各种生命周 ...
- Python os模块和sys模块 操作系统的各种接口
一.os模块 这个模块提供了一个便携式去使用操作系统的相关功能,如果只是想操作路径,请参阅os.path模块. ''' os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 ...
- Python 库汇总中文版
这又是一个 Awesome XXX 系列的资源整理,由 vinta 发起和维护.内容包括:Web框架.网络爬虫.网络内容提取.模板引擎.数据库.数据可视化.图片处理.文本处理.自然语言处理.机器学习. ...