IOS 取值控件(UIPicker)的使用方法
1.简单地取值控件示例
我们要做的一个UITextFiled,当点击UITextFiled,出现一个UIPick取值的页面,可以选择性别,在viewDidLoad中写下
- //sexPicker
- UIPickerView *sexPicker=[[UIPickerView alloc]init];
- sexPicker.showsSelectionIndicator=YES;
- sexPicker.delegate=self;
- sexPicker.dataSource=self;
- self.sex.inputView=sexPicker;
对于数据源回调函数和代理回调函数的实现,代码如下:
- #pragma sexPicker
- -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
- {
- return rSexComponentCount;
- }
- -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
- {
- return rSexRowCount;
- }
- -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
- {
- if(==row)
- {
- return @"Male";
- }
- else
- {
- return @"Female";
- }
- }
- -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
- {
- if (==row) {
- self.sex.text=@"Male";
- }
- else
- {
- self.sex.text=@"FeMale";
- }
- }
显示结果如图:
2.UIPickData的使用
在viewDidLoad中添加如下代码:
- //birthday Picker Choose
- self.birthdate.clearButtonMode=UITextFieldViewModeNever;
- UIDatePicker *birthPicker=[[UIDatePicker alloc]init];
- birthPicker.datePickerMode=UIDatePickerModeDate;
- //birthPicker.locale=[[NSLocale alloc]initWithLocaleIdentifier:<#(NSString *)#>];
- NSDateFormatter *formatter=[[NSDateFormatter alloc]init];
- formatter.dateFormat=@"MM-dd-yyyy";
- NSString *stdDate=@"01-01-1990";
- birthPicker.date=[formatter dateFromString:stdDate];
- [birthPicker addTarget:self action:@selector(chooseDate:) forControlEvents:UIControlEventValueChanged];
- self.birthdate.inputView=birthPicker;
其的触发事件函数
- #pragma DatePicker
- -(void)chooseDate:(UIDatePicker *)datePicker
- {
- NSDate *date=datePicker.date;
- NSDateFormatter *formatter=[[NSDateFormatter alloc]init];
- formatter.dateFormat=@"MM-dd-yyyy";
- NSString *dateString=[formatter stringFromDate:date];
- self.birthdate.text=dateString;
- //[showAllBarButton appendString:[[NSString alloc] initWithString:dateString]];
- //self.barButtonItem.title=showAllBarButton;
- }
运行结果:
3.自定义UIPicker的选项外观
除了通过简单的字符串进行UIPicker的显示之外,系统也提供了自定义视图的方法来为每一个选项进行自定义,API如下:
- -(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
虽然在每次调用此方法时都重新生成一个全新的UIView子类对象,配置完后返回给调用者也能够达到自定义选项的效果。不过就像UITableView的重用机制般,这里也必须考虑到当选项数量特别巨大时,有理由使用此代理方法提供的reusingView参数来重用之前的视图。
所以为了方便维护和扩展起见,专门新建一个自定义的UIView子类比较好,取名为customRowView,考虑到需要让此类有一定的外部配置功能,所以customRowView的头文件可以设置如下:
- #import <UIKit/UIKit.h>
- #define CUSTOM_HEIGHT 60.0f
- #define CUSTOM_WIDTH 240.0f
- @interface HBCustomRowView : UIView
- {
- @private
- UIImageView *_photoView;
- UILabel *_nameLabel;
- }
- @property(nonatomic,retain) UIImage *photo;
- @property(nonatomic,retain) NSString *name;
- @end
上述代码中,两个属性photo和name是专供外部进行重用配置的,而长度的宏定义是为新建对象和实现特定UIPicker代理方法服务。
- - (void)drawRect:(CGRect)rect
- {
- // Drawing code
- //照片
- if (!_photoView) {
- _photoView = [[UIImageView alloc]initWithFrame:CGRectMake(10.0f, 0.0f, CGRectGetWidth(self.frame)-50.0f, CGRectGetHeight(self.frame))];
- _photoView.backgroundColor = [UIColor clearColor];
- [self addSubview:_photoView];
- }
- _photoView.image=self.photo;
- //球员名字
- if (!_nameLabel) {
- _nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(CGRectGetMaxX(_photoView.frame), 0.0f, CGRectGetWidth(self.frame)-CGRectGetMaxX(_photoView.frame)-5.0f, CGRectGetHeight(self.frame))];
- _nameLabel.backgroundColor = [UIColor clearColor];
- _nameLabel.textAlignment = NSTextAlignmentRight;
- _nameLabel.textColor = [UIColor darkGrayColor];
- _nameLabel.shadowColor = [UIColor blackColor];
- _nameLabel.shadowOffset = CGSizeMake(1.0f, 1.0f);
- _nameLabel.numberOfLines=;
- _nameLabel.font = [UIFont systemFontOfSize:14.0f];
- [self addSubview:_nameLabel];
- }
- _nameLabel.text=self.name;
- }
然后需要UIPickerView准备一个数据源对象和代理对象,此对象的相关代码实现如下:
- #pragma mark-
- #pragma mark UIPicker datasource
- //几列
- -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
- {
- //只显示球员
- return ;
- }
- //每列多少行选项
- -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
- {
- return _datasource.count;
- }
- #pragma mark-
- #pragma mark UIPicker delegate
- //每列的宽度
- -(CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component
- {
- return 240.0f;
- }
- //每列的高
- -(CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component
- {
- return 60.0f;
- }
- //那列第几行的内容的标题
- -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
- {
- return @"";
- }
- //选中任何列的某一行
- -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
- {
- }
- //自定义UIPickerView的选项视图
- -(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
- {
- HBCustomRowView *aCustomView = nil;
- HBPlayerInfo *onePlayer =nil;
- //异常
- if(row>=_datasource.count)
- {
- return [[UIView alloc]init];
- }
- //取出相应的球员对象
- NSDictionary *player=[_datasource objectAtIndex:row];
- onePlayer.name=[player objectForKey:@"name"];
- onePlayer.role=[player objectForKey:@"role"];
- onePlayer.number=[player objectForKey:@"number"];
- if(view)
- {
- //重用
- aCustomView=(HBCustomRowView *)view;
- //让重用的视图再次调用drawRect方法
- [aCustomView setNeedsDisplay];
- }
- else
- {
- //新建
- aCustomView =[[HBCustomRowView alloc]initWithFrame:CGRectMake(0.0f, 0.0f, 240.0f, 60.0f)];
- aCustomView.backgroundColor=[UIColor clearColor];
- }
- //配置自定义视图
- aCustomView.photo = [UIImage imageNamed:@"gaolin.jpeg"];
- aCustomView.name=onePlayer.name;
- return aCustomView;
- }
IOS 取值控件(UIPicker)的使用方法的更多相关文章
- asp.net取HTML控件值
asp.net取HTML控件值所有html表单里面的值控件,提交后都是以键值 key=value&key=value&……这样的形式提交给后台. radio也一样,会将选中的radio ...
- 无比迅速敏捷地开发iOS超精美控件
目录 前言 设计 编码 PaintCode 前言 自从人生第一篇博客<iOS中的预编译指令的初步探究>问世以来 浏览量竟然达到了360多,(路过的大神勿笑!)这些浏览量使我兴奋异常但又令我 ...
- 从0到1搭建移动App功能自动化测试平台(2):操作iOS应用的控件
转自:http://debugtalk.com/post/build-app-automated-test-platform-from-0-to-1-Appium-interrogate-iOS-UI ...
- tkinter中scale拖拉改变值控件(十一)
scale拖拉改变值控件 使用户通过拖拽改变值 简单的实现: import tkinter wuya = tkinter.Tk() wuya.title("wuya") wuya. ...
- iOS基础UI控件介绍-Swift版
iOS基础UI控件总结 iOS基础控件包括以下几类: 1.继承自NSObject:(暂列为控件) UIColor //颜色 UIImage //图像 2.继承自UIView: 只能相应手势UIGest ...
- iOS基本UI控件总结
包括以下几类: //继承自NSObject:(暂列为控件) UIColor *_color; //颜色 UIImage *_image; //图像 //继承自UIView:只能相应手势UI ...
- iOS开发--UIKit控件之UISearchBar(搜索栏)
今天因为需求原因,需要用到搜索控件:之前一直没有用到过这个控件,所以去百度了一下,找到一篇可以说很齐全的资料,感谢这位作者. 然而,我并没有找到可以更改字体大小的属性或方法,希望有知道的告诉我一声,谢 ...
- C#常用控件的属性以及方法(转载)
-----以前看别人的,保存了下来,但是忘了源处,望见谅. C#常用控件属性及方法介绍 目录 1.窗体(Form) 2.Label (标签)控件 3.TextBox(文本框)控件 4.RichText ...
- WPF编程,通过Double Animation动态旋转控件的一种方法。
原文:WPF编程,通过Double Animation动态旋转控件的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/art ...
随机推荐
- paip.c++ qt messagebox用法
paip.c++ qt messagebox用法 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net ...
- hdu1114Piggy-Bank(DP完全背包)
题意:在ACM可以做任何事情,必须准备和预算获得必要的财政支持.这次行动的主要收入来自不可逆绑定金钱(IBM).背后的想法很简单.每当一些ACM成员有任何小的钱,他把所有的硬币和成小猪银行抛出.你知道 ...
- 从VS转MyEclipse的15天使用体验
脱离了VS强大的IDE功能之后,转向MyEclipse,发现很大差别,Java的IDE对比VS感觉弱很多,而且树形没有那么好用,Java里面是以包为主,区别与C#的最大就是,高亮提示关键字,这一点Ja ...
- Nio Client
public class NIOClient { static int SIZE = 2; final static int bufferSize = 500 * 1024; static InetS ...
- ASPから広がり
ASP是动态服务器页面(Active Server Page)外语缩写.[1]是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单.方便的编程工具.ASP的网页文 ...
- codeforces 633C. Spy Syndrome 2 hash
题目链接 C. Spy Syndrome 2 time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- zoj 2587 Unique Attack 最小割判定
题目链接 让你判断最小割是否唯一. 判断方法是, 先求一遍最大流, 然后从源点dfs一次, 搜索未饱和边的数目. 从汇点dfs一次, 同样也是搜索未饱和边的数目, 看总和是否等于n. 如果等于n那么唯 ...
- ffmpeg用法
1. help ffmpeg.exe -h > help.txt 2. 解码: ffmpeg -i 123.264 123.yuv ffmpeg -i 123.264 -vframes 200 ...
- ExtJS 修改load paging时的参数
ExtJS 的pagingToolbar 在翻页的时候传入的参数是固定的 分别是start 和 limit(其中limit的值就是store.pageSize的值) 如何在每次翻页的时候传入自己的参 ...
- PCB外形加工