holydancer原创,如需转载,请在显要位置注明:

转自holydancer的CSDN专栏,原文地址:http://blog.csdn.net/holydancer/article/details/7408703

Iphone中的时间选择器比较有特色,有点儿类似老虎机的感觉,这也是Iphone开发中比较难的一个控件,这种样式的控件有两种,一种是date picker,另一种是picker view.其中前者比较好用,当作一个常用的控件,只要有输出口,就能用这个对象随时取出date,后者则是一个比较复杂的view,可以显示我们自定义的内容。需要实现两个协议才能进行操作提取数据,现在我们先新建一个项目后画出一个界面,包括一个date picker,一个picker view。中间是一个button,用来显示当前picker上的信息。

然后先研究date picker,将button和date picker的输出口声明出来,再声明一个操作方法用来响应button的点击事件,就称为click方法吧,然后在该方法中可以直接用date picker的对象取得一个NSDate的对象,然后建一个alertview将其显示出来,看代码:

viewController.h:

#import <UIKit/UIKit.h>@interface ViewController : UIViewController
@property (retain, nonatomic) IBOutlet UIDatePicker *myDatePicker;
@property (retain, nonatomic) IBOutlet UIButton *myButton;
- (IBAction)click:(id)sender;@end

viewController.m:

#import "ViewController.h"@interface ViewController ()@end@implementation ViewController
@synthesize myDatePicker;
@synthesize myButton;- (void)viewDidLoad
{[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.
}- (void)viewDidUnload
{[self setMyDatePicker:nil];[self setMyButton:nil];[super viewDidUnload];// Release any retained subviews of the main view.
}- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}- (void)dealloc {[myDatePicker release];[myButton release];[super dealloc];
}
- (IBAction)click:(id)sender {NSString *tmpStr = [[NSString alloc]initWithFormat:@"格式化前的时间是%@",[myDatePicker date]];//直接调用datePicker 的date方法取得NSDate的时间,做成字符串//不格式化不准确,这里不演示了。UIAlertView *myAlert = [[UIAlertView alloc]initWithTitle:@"显示时间" message:tmpStr delegate:self cancelButtonTitle:@"取消" otherButtonTitles:nil];//AlertView弹出[myAlert show];[tmpStr release];[myAlert release];
}
@end

上面主要是最后一个方法的实现,很简单吧。看效果:

到现在date picker已经介绍了,有输出口就可以直接调用方法取出来时间 ,现在介绍比较复杂的picer view,在介绍之前先了解几个概念,在picker view中,样式类似于date picker,可以有若干个组件-component,也就是竖着的分栏,像date picker中的月日,时,分的分组,每一个component可以有多个row,这样就确定了一个picker View的结构,然后再按以上结构提供数据,就可以显示了,所以在加载picker view之前必须确定一下结构和数据,所以刚才我们明明拖了一个picker View上去却没有显示。怎样来显示一个picker view呢。用三个方法来确定:

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{//该方法来自协议<UIPickerViewDataSource>//该方法用来确定pickerView有几个component;}
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{//该方法来自协议<UIPickerViewDataSource>//该方法来确定每一个component中有多少个row,即多少行//可以理解为每一个竖排中有多少个横排。}
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{//该方法来自协议<UIPickerViewDelegate>//三个参数,第一个参数表示确定是哪一个pickerView//第二个参数表示哪一行//第三个参数表示哪一个component。}

由此可见,在这三个方法中才构造了一个具体的picker View,为了在viewController.m中实现这三个方法,需要实现那两个协议,协议名真的很形象,标准也很统一,很好记的。

现在我们创建一个只有一个component的picker View,需要创建一个字符串数组来显示每一行的内容,然后将这三个方法在代码中补充完全,并在button事件中添加对picker View的响应用以测试。然后三个方法和响应方法都完成后在xib文件中将picker View右边的输出口对应拖拽到file's owner中,将数据源和代理与picker View关联起来。

viewController.h:

#import <UIKit/UIKit.h>@interface ViewController : UIViewController<UIPickerViewDelegate,UIPickerViewDataSource>
@property (retain, nonatomic) IBOutlet UIDatePicker *myDatePicker;
@property (retain, nonatomic) IBOutlet UIButton *myButton;
- (IBAction)click:(id)sender;
@property (retain, nonatomic) IBOutlet UIPickerView *myPickerView;
@property (retain, nonatomic) NSArray *myStringArray;
//创建一个字符串数组用来提供picker View的显示内容。@end

viewController.m:

#import "ViewController.h"@interface ViewController ()@end@implementation ViewController
@synthesize myPickerView;
@synthesize myDatePicker;
@synthesize myButton;
@synthesize myStringArray;- (void)viewDidLoad
{[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.//MVC是不提倡在委托中处理数据的,所以我们将myStringArray的赋值放到这里myStringArray = [[NSArray alloc]initWithObjects:@"吃饭",@"睡觉",@"打豆豆",nil];}- (void)viewDidUnload
{[self setMyDatePicker:nil];[self setMyButton:nil];[self setMyPickerView:nil];[super viewDidUnload];// Release any retained subviews of the main view.
}- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}- (void)dealloc {[myDatePicker release];[myButton release];[myPickerView release];[super dealloc];
}
- (IBAction)click:(id)sender {NSInteger selectedRow=[myPickerView selectedRowInComponent:0];//当前picker View选择的行号NSString *tmpStr = [[NSString alloc]initWithFormat:@"格式化前的时间是%@,选择的picker View内容是%@",[myDatePicker date],[myStringArray objectAtIndex:selectedRow]];//注意这里是从字符串(数据源)中取的字符串,不是在picker View中取的。//直接调用datePicker 的date方法取得NSDate的时间,做成字符串//不格式化不准确,这里不演示了。UIAlertView *myAlert = [[UIAlertView alloc]initWithTitle:@"显示时间" message:tmpStr delegate:self cancelButtonTitle:@"取消" otherButtonTitles:nil];//AlertView弹出[myAlert show];[tmpStr release];[myAlert release];
}
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{//该方法来自协议<UIPickerViewDataSource>//该方法用来确定pickerView有几个component;//我们只创造一个component,只需要返回1就行了return 1;}
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{//该方法来自协议<UIPickerViewDataSource>//该方法来确定每一个component中有多少个row,即多少行//可以理解为每一个竖排中有多少个横排。//因为只有一个component,所以我们就不需要if判断了//直接返回字符串数组的元素个数,就是我们的行数了return [myStringArray count];}
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{//该方法来自协议<UIPickerViewDelegate>//三个参数,第一个参数表示确定是哪一个pickerView//第二个参数表示哪一行//第三个参数表示哪一个component。//同样不用判断,数组和row完全对照return [myStringArray objectAtIndex:row];}
@end

测试看效果:

好了,这样就大概了解了picker View的实现了,将要点再过一下:

1,要实现两个协议,协议中对应的三个方法分别描述了picker View的component,row ,和显示的内容。

2,picker View的显示内容是从数组中取得的,在取时也要从数组中取。

3,存储picker View显示信息的字符串往往在viewDidLoad方法中进行初始化。

4,要记得在xib文件中将代理和数据源拖拽对应。

关键字:Iphone IOS 开发 ,基础 ,入门 ,date picker ,picker View

Iphone开发(七)date picker 和 picker view,较复杂的控件相关推荐

  1. 安装Microsoft Date and Time Picker Control 6.0(SP4)控件

    安装Microsoft Date and Time Picker Control 6.0(SP4)控件 如果Excel或Access里面没有注册Microsoft Date and Time Pick ...

  2. 安卓开发(一)环境搭建、基本程序与控件

    layout: post title: 安卓开发(一)环境搭建.基本程序与控件 description: 安卓开发(一)环境搭建.基本程序与控件 tag: 安卓 文章目录 Intent:协助应用间的交 ...

  3. Kotlin 自定义View之实现标尺控件(选择身高、体重等)

    本篇文章讲的是Kotlin 自定义view之实现标尺控件Ruler,以选择身高.体重等.开发中,当我们需要获取用户的身高和体重等信息时,如果直接让他们输入,显然体验不够好.像类似于唯品会.好轻等APP ...

  4. PyQt5快速开发与实战 5.2 容器:装载更多的控件

    PyQt5快速开发与实战 文章目录 PyQt5快速开发与实战 5. 第5章 PyQt5 高级界面控件 5.2 容器:装载更多的控件 5.2.1 QTabWidget 5.2.2 QStackedWid ...

  5. Qt5 学习之路及嵌入式开发教程11:Qt5标准输入对话框类及QSlider控件

    Qt5 学习之路及嵌入式开发教程11:Qt5标准输入对话框类及QSlider控件 这次任务要完成弹出窗口及QSlider控件的界面设计及代码编写 一.Qt5弹出窗口 1.界面式布局 建立项目工程文件 ...

  6. android lrc 歌词view,自定义View强势来袭,用自定义View实现歌词显示控件下篇之自定义LyricView的实现...

    在上篇中,我与大家分享了关于如何进行*.lrc歌词文件的解析,以及将解析完成后的歌词展示在镶嵌在ScrollView中的TextView上,就这样而言,一个简单的歌词显示功能也就实现了. 但是,如何才 ...

  7. Android Paint应用之自定义View实现进度条控件

    在上一篇文章<Android神笔之Paint>学习了Paint的基本用法,但是具体的应用我们还没有实践过.从标题中可知,本文是带领读者使用Paint,自定义一个进度条控件. 上图就是本文要 ...

  8. java 控件内布局_Java开发桌面程序学习(二)————fxml布局与控件学习

    JavaFx项目 新建完项目,我们的项目有三个文件 Main.java 程序入口类,载入界面并显示 Controller.java 事件处理,与fxml绑定 Sample.fxml 界面 sample ...

  9. ios开发 自定义btn_iOS一步步实现一个高度自定义UIButton控件

    需求背景 日常开发中UIButton的图片与标题默认的布局是固定的,是在水平方向左右排列.但是我们会经常需要更改image和title的位置来实现需求,这是个很常见的需求就不多说了.所以下面就来谈谈如 ...

  10. 云炬Android开发笔记 15评价晒单功能实现(自定义评分控件和仿微信自动多图选择控件)

    阅读目录 1. 晒单评价 1.1 点击页面跳转的实现 1.2 自定义评价订单的布局实现 1.3 星星布局的实现 2. 仿微信自动多图及删除控件 2.1 属性值及控件的定义 2.2 图片初始化方法onM ...

最新文章

  1. IssueVission的命令处理
  2. python分析b站_Python爬取并分析B站最热排行榜,我发现了这些秘密
  3. [转]printf 函数实现的深入剖析
  4. swfobject介绍
  5. Chapter 6. MATLAB数值计算基础
  6. js大地坐标与经纬度坐标互转
  7. matlab常数模块,simulink怎样输入常数
  8. oracle的month函数的使用方法,oracle add_month函数
  9. C# 产生验证码 利用背景图片绘制
  10. 安卓手机端口号怎么查看_安卓手机里的专业模式究竟该怎么拍?
  11. iphone 屏幕大小及计算
  12. Phi-divergence
  13. SDN的基本概念和基本架构
  14. ACL(用访问控制列表实现包过滤)
  15. 通达信顾比倒数线指标公式,信号不漂移
  16. 奔腾PLFE5001电压力锅
  17. win10安装docker(适用于windows家庭版)
  18. api接口测试的工具
  19. JAVA毕设项目网上拍卖系统(java+VUE+Mybatis+Maven+Mysql)
  20. 通过div+css做出好看的横排导航栏

热门文章

  1. MINIO_ACCESS_KEY and MINIO_SECRET_KEY are deprecated,Please use MINIO_ROOT_USER and MINIO_ROOT_PASSW
  2. vue-devtools 各版本安装
  3. mysql多对一[自用]
  4. 张赐荣:计算机网络快速入门教程
  5. ArcGIS10.8下载及安装教程(附安装步骤)
  6. 为啥功放上的音量控制的dB数都是负的
  7. DBA与项目的那堆事 ——目录
  8. 福昕阅读器和编辑器使用注意事项高级查找功能两个应用软件共用。但是注意不能卸载福昕编辑器,试验过卸载后福昕阅读器就没有查找功能了
  9. ubuntu安装 pyqt5 报错 xcb找不到 pyinstaller打包open3d报错
  10. 设置 app 不能在模拟器上运行