iOs基础篇(二十二)—— UIPickerView、UIDatePicker控件的使用

一、UIPickerView

UIPickerView是一个选择器控件,可以生成单列的选择器,也可生成多列的选择器,而且开发者完全可以自定义选择项的外观,因此用法非常灵活。

1、常用属性

(1)numberOfComponents:获取UIPickerView指定列中包含的列表项的数量。

(2)showsSelectionIndicator:控制是否显示UIPickerView中的选中标记(以高亮背景作为选中标记)。

2、常见方法

(1)- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;

  获取UIPickerView包含的列数量

(2)- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;

  该UIPickerView将通过该方法判断指定列应该包含多少个列表项

(3)- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component;

  该方法返回的CGFloat值将作为该UIPickerView控件中指定列的宽度

(4)- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component;

  该方法返回的CGFloat值将作为该UIPickerView控件中指定列中列表项的高度

(5)- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;

  该方法返回的NSString值将作为该UIPickerView控件中指定列的列表项的文本标题

(6)- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view;

  该方法返回的UIView控件将直接作为该UIPickerView控件中指定列的指定列表项

(7)- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component;

  当用户单击选中该UIPickerView控件的指定列的指定列表项时将会激发该方法

demo代码:

 1 #import "ViewController.h"
 2
 3 @interface ViewController ()<UIPickerViewDataSource,UIPickerViewDelegate>{
 4
 5     UIPickerView *pickerView;
 6     NSArray *nameArray;
 7     NSArray *ageArray;
 8 }
 9
10 @end
11
12 @implementation ViewController
13
14 - (void)viewDidLoad {
15     [super viewDidLoad];
16     // Do any additional setup after loading the view, typically from a nib.
17
18     CGFloat width = self.view.frame.size.width;
19
20     pickerView = [[UIPickerView alloc] initWithFrame:(CGRect){0,0,width,300}];
21     [self.view addSubview:pickerView];
22     pickerView.dataSource = self;
23     pickerView.delegate = self;
24     pickerView.showsSelectionIndicator = YES;
25
26     // 创建并初始化两个NSArray对象,分别作为两列的数据
27     nameArray = @[@"一", @"二", @"三", @"四", @"五", @"六"];
28     ageArray =  @[@"11", @"22", @"33", @"44", @"55", @"66"];
29
30 }
31
32 // UIPickerViewDataSource中定义的方法,该方法返回值决定该控件包含多少列
33 - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
34     return 2;// 返回2表明该控件只包含2列
35 }
36
37 //该方法的返回值决定该控件指定列包含多少个列表项
38 - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
39     if (component==0) {
40         // 如果是第一列,返回nameArray中元素的个数
41         // 即nameArray包含多少个元素,第一列就包含多少个列表项
42         return [nameArray count];
43     }else
44         // 如果是其他列,返回ageArray中元素的个数。
45         // 即ageArray包含多少个元素,其他列(只有第二列)包含多少个列表项
46         return [ageArray count];
47 }
48
49 //UIPickerView中指定列的宽度
50 - (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component{
51
52     if (component==0) {
53         // 如果是第一列,宽度为50
54         return 50;
55     }else
56         // 如果是其他列(只有第二列),宽度为80
57         return 80;
58 }
59
60 - (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{
61
62     return 40;
63 }
64
65 //当用户选中UIPickerViewDataSource中指定列和列表项时激发该方法
66 - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
67     NSArray* name = [nameArray objectAtIndex:row];
68     // 使用一个UIAlertView来显示用户选中的列表项
69     UIAlertView* alert = [[UIAlertView alloc]
70                           initWithTitle:@"提示"
71                           message:[NSString stringWithFormat:@"你选中的%@是:%@"
72                                    , name, [ageArray objectAtIndex:row]]
73                           delegate:nil
74                           cancelButtonTitle:@"确定"
75                           otherButtonTitles:nil];
76     [alert show];
77 }
78
79 //UIPickerView中指定列和列表项上显示的标题
80 - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
81     // 如果是第一列,返回nameArray中row索引处的元素
82     // 即第一列的列表项标题由nameArray集合元素决定
83     if (component==0) {
84         return [nameArray objectAtIndex:row];
85     }else
86         return [ageArray objectAtIndex:row];
87
88 }

二、UIDatePicker

UIDatePicker继承自UIControl,专门用于接受日期、时间和持续时长的输入。日期选取器的各列会按照指定的风格进行自动配置,这样就让开发者不必关心如何配置表盘这样的底层操作。你也可以对其进行定制,令其使用任何范围的日期。

1、创建UIDatePicker及添加代理

(1)创建UIPickerView;

(2)将pickerView添加至视图;

(3)实现监听事件方法;

 1 #import "ViewController.h"
 2
 3 @interface ViewController (){
 4
 5     UIDatePicker *datePicker;
 6 }
 7
 8 @end
 9
10 @implementation ViewController
11
12 - (void)viewDidLoad {
13     [super viewDidLoad];
14     // Do any additional setup after loading the view, typically from a nib.
15
16     datePicker = [[UIDatePicker alloc] initWithFrame:(CGRect){0,0,300,300}];
17     [self.view addSubview:datePicker];
18
19     [datePicker addTarget:self action:@selector(dateChange:) forControlEvents:UIControlEventValueChanged];
20
21 }
22
23 - (void)dateChange:(UIDatePicker*)dateSender{
24     UIDatePicker *ctrl = (UIDatePicker*)dateSender;
25     NSDate *date = ctrl.date;
26
27     NSLog(@"%@",date);
28
29 }

2、UIDatePicker设置显示格式

(1) 创建并初始化NSLocale;

(2) 将datePicker.locale属性set为NSLocale的值;

(3) 设置12/24小时制是根据手机本身时间显示;

1
2     NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zw"];
3     datePicker.locale = locale;

3、设置DatePicker的日历

默认为当天;

1 [datePicker setCalendar:[NSCalendar currentCalendar]];

4、设置DatePicker的时区

1 [datePicker setTimeZone:[NSTimeZone defaultTimeZone]];

5、设置DatePicker的允许的最小/最大日期

minimumDate/maximunDate;

6、设置DatePicker的倒计时间

1) 设置日期选择的模

[datePicker setDatePickerMode:UIDatePickerModeCountDownTimer];

2) 设置倒计时的时长

注意:设置倒计时时长需要在确定模式之后指定

// 倒计时的时长,以秒为单位

[datePicker setCountDownDuration:10 * 60];

效果图:

7、设置分钟间隔

datePicker.minuteInterval = 15;

8、显示小时,分钟和AM/PM,这个的名称是根据本地设置的

[datePicker setDatePickerMode:UIDatePickerModeTime];

效果图:

9、显示年月日,名称根据本地设置的

[datePicker setDatePickerMode:UIDatePickerModeDate];

效果图:

10、 显示日期,小时,分钟,和AM/PM,名称是根据本地设置的

[datePicker setDatePickerMode:UIDatePickerModeDateAndTime];

效果图:

11、显示小时和分钟

[datePicker setDatePickerMode:UIDatePickerModeCountDownTimer];

效果图:

时间: 2024-08-07 00:29:25

iOs基础篇(二十二)—— UIPickerView、UIDatePicker控件的使用的相关文章

ios基础篇(十二)——UINavgationController的使用(三)ToolBar

UIToolBar存在于UINavigationController导航栏控制器中,而且默认被隐藏:设置UINavigationController的toolbarHidden属性可显示UIToolBar. 一.UIToolBar的设置 1.在RootViewController.m的viewDidLoad方法中添加代码: [self.navigationController setToolbarHidden:NO animated:YES]; 如图:显示底部ToolBar 2.设置UITool

iOS基础篇(十五)——UIScrollView的基本用法

滚动视图(UIScrollView)通常用于显示内容尺寸大于屏幕尺寸的视图. 一.基本属性 1.CGSize contentSize :设置UIScrollView的滚动范围 2.CGPoint contentOffset :UIScrollView当前滚动的位置 3.UIEdgeInsets contentInset :设置内容的边缘 4.BOOL bounces 当超出边界时表示是否可以反弹 5.BOOL scrollEnabled 是否能滚动 6.BOOL showsHorizontalS

iOS开发——UI进阶篇(十九)UISearchBar控件简介

最近用到搜索功能.总结一下 搜索,无疑可以使用UISearchBar控件! 那就先了解一下UISearchBar控件吧! UISearchBar控件就是要为你完成搜索功能的一个专用控件.它集成了很多你意想不到的功能和特点! 首先,还是来普及一下UISearchBar控件API相关的属性和方法吧! UISearchBar属性相关 _searchBar = [[UISearchBar alloc] initWithFrame:CGRectZero];// 初始化,不解释 [self.searchBa

MFC编程入门之二十六(常用控件:滚动条控件ScrollBar)

回顾上一节,讲的是组合框控件Combo Box的使用.本节详解滚动条控件Scroll Bar的相关内容. 滚动条控件简介 滚动条大家也很熟悉了,Windows窗口中很多都有滚动条.前面讲的列表框和组合框设置了相应属性后,如果列表项显示不下也会出现滚动条.滚动条分为水平滚动条(Horizontal Scroll Bar)和垂直滚动条(Vertical Scroll Bar)两种.滚动条中有一个滚动块,用于标识滚动条当前滚动的位置.我们可以拖动滚动条,也可以用鼠标点击滚动条某一位置使滚动块移动. 从

自定义控件三部曲之绘图篇(十六)——给控件添加阴影效果与发光效果

前言:要么出击,要么出局,命运女神总会眷顾拼劲全力的一方 相关文章: <Android自定义控件三部曲文章索引>:http://blog.csdn.net/harvic880925/article/details/50995268 这节我们将学到如下内容: 传统地给按钮添加阴影的方法 如何给已有控件添加阴影 如何给图片添加阴影 一.layerlist给按钮添加阴影效果 给控件添加阴影有很多方法,但平常我们给按钮添加阴影最常用的就是使用layerlist多层绘图来添加阴影效果,我们先来看一下给按

【Android的从零单排开发日记】之入门篇(十四)——Button控件+自定义Button控件

    好久不见,又是一个新的学期开始了,为什么我感觉好惆怅啊!这一周也发生了不少事情,节假日放了三天的假(好久没有这么悠闲过了),实习公司那边被组长半强制性的要求去解决一个后台登陆的问题,结果就是把Android这块放在一边了,滚去看PHP的后台框架了(人家只是一个Android实习生,不带这么玩的),学校那边老师布置了一个hibernate的项目,还说我给你们一个月时间,慢慢看,慢慢学习(结果就是在群上发了一大堆的hibernate的视频教程,还真的是慢慢看慢慢学习了,而且视频还是极老的,h

Python成长笔记 - 基础篇 (十二)----RabbitMQ、Redis 、线程queue

本节内容: 1.RabbitMQ 消息队列 2.Redis 3.Mysql PY 中的线程queue(threading Queue):用于多个线程之间进行数据交换,不能在进程间进行通信 进程queue:父进程与子进程中的交互,或者是同属于同一个父进程下多个子进程进行交互:两个不相关的进程间交互不能用进程queue RabbitMQ --信息流是单向的 两个完全独立的程序进行交互:1.进程间建立socket 2.一个写入disk,另一个调用 3.使用中间进程,RabbitMQ等 Remote p

ios基础篇(十八)——Delegate 、NSNotification 和 KVO用法及其区别

一.Delegate Delegate本质是一种程序设计模型,iOS中使用Delegate主要用于两个页面之间的数据传递.iphone中常用@protocol和delegate的机制来实现接口的功能.例如想在A的功能要在B中实现,可以在A中定义一个Protocol. protocol用法: @interface ClassA :ClassB<protocol1, protocol2> 1.首先声明一个UIView类: @interface myView  :UIView{  } @end: 2

ios基础篇(十)——UINavgationController的使用(一)UIBarButtonItem的添加

UINavigationController又被成为导航控制器,继承自UIViewController,以栈的方式管理所控制的视图控制器,下面就详细说一下UINavigationController的使用: 1.首先新建一个工程(就不多说了)创建RootViewController(继承自UIViewController). 2.打开AppDelegate.h文件添加属性 3.打开AppDelegate.m文件的 - (BOOL)application:(UIApplication *)appl

【转】VS2010/MFC编程入门之二十五(常用控件:组合框控件Combo Box)

原文网址:http://www.jizhuomi.com/software/189.html 上一节鸡啄米讲了列表框控件ListBox的使用,本节主要讲解组合框控件Combo Box.组合框同样相当常见,例如,在Windows系统的控制面板上设置语言或位置时,有很多选项,用来进行选择的控件就是组合框控件.它为我们的日常操作提供了很多方便. 组合框控件简介 组合框其实就是把一个编辑框和一个列表框组合到了一起,分为三种:简易(Simple)组合框.下拉式(Dropdown)组合框和下拉列表式(Dro