选择器(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 ...
随机推荐
- 谈谈对Spring IOC(控制反转)的理解--转
谈谈对Spring IOC(控制反转)的理解--转 学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC ...
- java校验身份证号码
/** * 18位身份证校验,粗略的校验 * @author lyl * @param idCard * @return */ public static boolean is18ByteIdCard ...
- 记一个logrotate的配置文件权限问题
问题描述 从git仓库更新了别人配置好的logrotate,发现不能正常运行.手工执行报错 error: Ignoring syslog because of bad file mode - must ...
- Git和Github简单教程【转】
转自:https://www.cnblogs.com/schaepher/p/5561193.html#clone 原文链接:Git和Github简单教程 网络上关于Git和GitHub的教程不少,但 ...
- fastDFS 命令笔记【转】
端口开放 这是命令运行的前提 iptables -I INPUT -p tcp -m state –state NEW -m tcp –dport 22 -j ACCEPT iptables -I I ...
- java中String的==和equals的区别
首先看代码1: public static void main(String[] args) { List<String> list=new ArrayList<String> ...
- 142.Linked List Cycle II---双指针
题目链接 题目大意:141题目的扩展,给出单链表,判断是否有环,如果有环,找出环的开始的结点,如果没有环,返回null. 法一(借鉴):在已经找出单链表环的基础上再找开始结点,要时刻记住这个环不一定是 ...
- Ubuntu16.04安装记
Ubuntu16.04安装记 基本信息: 华硕笔记本 Windows 10 家庭版 处理器:Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz 2.71GHz 已安装的内 ...
- C/C++——C语言库函数大全
本文转载自:https://blog.csdn.net/yanfan0916/article/details/6450442###; 1. 分类函数: ctype.h int isalpha(int ...
- WebService初识
Web service 是一种跨编程语言和跨操作系统平台的远程调用技术,即跨平台远程调用技术.也就是说,不管是J2EE架构,还是.net架构 只要按照规范就可以进行通信,实现数据交互等. 这里说的&q ...