1.简单地取值控件示例

我们要做的一个UITextFiled,当点击UITextFiled,出现一个UIPick取值的页面,可以选择性别,在viewDidLoad中写下

  1. //sexPicker
  2. UIPickerView *sexPicker=[[UIPickerView alloc]init];
  3. sexPicker.showsSelectionIndicator=YES;
  4. sexPicker.delegate=self;
  5. sexPicker.dataSource=self;
  6. self.sex.inputView=sexPicker;

对于数据源回调函数和代理回调函数的实现,代码如下:

  1. #pragma sexPicker
  2. -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
  3. {
  4. return rSexComponentCount;
  5. }
  6.  
  7. -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
  8. {
  9. return rSexRowCount;
  10. }
  11.  
  12. -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
  13. {
  14. if(==row)
  15. {
  16. return @"Male";
  17. }
  18. else
  19. {
  20. return @"Female";
  21. }
  22. }
  23.  
  24. -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
  25. {
  26. if (==row) {
  27. self.sex.text=@"Male";
  28. }
  29. else
  30. {
  31. self.sex.text=@"FeMale";
  32. }
  33. }

显示结果如图:

2.UIPickData的使用

在viewDidLoad中添加如下代码:

  1. //birthday Picker Choose
  2. self.birthdate.clearButtonMode=UITextFieldViewModeNever;
  3. UIDatePicker *birthPicker=[[UIDatePicker alloc]init];
  4. birthPicker.datePickerMode=UIDatePickerModeDate;
  5. //birthPicker.locale=[[NSLocale alloc]initWithLocaleIdentifier:<#(NSString *)#>];
  6. NSDateFormatter *formatter=[[NSDateFormatter alloc]init];
  7. formatter.dateFormat=@"MM-dd-yyyy";
  8. NSString *stdDate=@"01-01-1990";
  9. birthPicker.date=[formatter dateFromString:stdDate];
  10. [birthPicker addTarget:self action:@selector(chooseDate:) forControlEvents:UIControlEventValueChanged];
  11. self.birthdate.inputView=birthPicker;

其的触发事件函数

  1. #pragma DatePicker
  2. -(void)chooseDate:(UIDatePicker *)datePicker
  3. {
  4. NSDate *date=datePicker.date;
  5. NSDateFormatter *formatter=[[NSDateFormatter alloc]init];
  6. formatter.dateFormat=@"MM-dd-yyyy";
  7. NSString *dateString=[formatter stringFromDate:date];
  8. self.birthdate.text=dateString;
  9.  
  10. //[showAllBarButton appendString:[[NSString alloc] initWithString:dateString]];
  11. //self.barButtonItem.title=showAllBarButton;
  12.  
  13. }

运行结果:

3.自定义UIPicker的选项外观

除了通过简单的字符串进行UIPicker的显示之外,系统也提供了自定义视图的方法来为每一个选项进行自定义,API如下:

  1. -(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view

虽然在每次调用此方法时都重新生成一个全新的UIView子类对象,配置完后返回给调用者也能够达到自定义选项的效果。不过就像UITableView的重用机制般,这里也必须考虑到当选项数量特别巨大时,有理由使用此代理方法提供的reusingView参数来重用之前的视图。

所以为了方便维护和扩展起见,专门新建一个自定义的UIView子类比较好,取名为customRowView,考虑到需要让此类有一定的外部配置功能,所以customRowView的头文件可以设置如下:

  1. #import <UIKit/UIKit.h>
  2.  
  3. #define CUSTOM_HEIGHT 60.0f
  4. #define CUSTOM_WIDTH 240.0f
  5.  
  6. @interface HBCustomRowView : UIView
  7. {
  8. @private
  9. UIImageView *_photoView;
  10. UILabel *_nameLabel;
  11. }
  12.  
  13. @property(nonatomic,retain) UIImage *photo;
  14. @property(nonatomic,retain) NSString *name;
  15.  
  16. @end

上述代码中,两个属性photo和name是专供外部进行重用配置的,而长度的宏定义是为新建对象和实现特定UIPicker代理方法服务。

  1. - (void)drawRect:(CGRect)rect
  2. {
  3. // Drawing code
  4. //照片
  5. if (!_photoView) {
  6. _photoView = [[UIImageView alloc]initWithFrame:CGRectMake(10.0f, 0.0f, CGRectGetWidth(self.frame)-50.0f, CGRectGetHeight(self.frame))];
  7.  
  8. _photoView.backgroundColor = [UIColor clearColor];
  9. [self addSubview:_photoView];
  10. }
  11.  
  12. _photoView.image=self.photo;
  13.  
  14. //球员名字
  15. if (!_nameLabel) {
  16. _nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(CGRectGetMaxX(_photoView.frame), 0.0f, CGRectGetWidth(self.frame)-CGRectGetMaxX(_photoView.frame)-5.0f, CGRectGetHeight(self.frame))];
  17. _nameLabel.backgroundColor = [UIColor clearColor];
  18. _nameLabel.textAlignment = NSTextAlignmentRight;
  19. _nameLabel.textColor = [UIColor darkGrayColor];
  20. _nameLabel.shadowColor = [UIColor blackColor];
  21. _nameLabel.shadowOffset = CGSizeMake(1.0f, 1.0f);
  22. _nameLabel.numberOfLines=;
  23. _nameLabel.font = [UIFont systemFontOfSize:14.0f];
  24.  
  25. [self addSubview:_nameLabel];
  26. }
  27. _nameLabel.text=self.name;
  28. }

然后需要UIPickerView准备一个数据源对象和代理对象,此对象的相关代码实现如下:

  1. #pragma mark-
  2. #pragma mark UIPicker datasource
  3. //几列
  4. -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
  5. {
  6. //只显示球员
  7. return ;
  8. }
  9.  
  10. //每列多少行选项
  11. -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
  12. {
  13. return _datasource.count;
  14. }
  15.  
  16. #pragma mark-
  17. #pragma mark UIPicker delegate
  18. //每列的宽度
  19. -(CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component
  20. {
  21. return 240.0f;
  22. }
  23.  
  24. //每列的高
  25. -(CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component
  26. {
  27. return 60.0f;
  28. }
  29.  
  30. //那列第几行的内容的标题
  31. -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
  32. {
  33. return @"";
  34. }
  35.  
  36. //选中任何列的某一行
  37. -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
  38. {
  39. }
  40.  
  41. //自定义UIPickerView的选项视图
  42. -(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
  43. {
  44. HBCustomRowView *aCustomView = nil;
  45. HBPlayerInfo *onePlayer =nil;
  46.  
  47. //异常
  48. if(row>=_datasource.count)
  49. {
  50. return [[UIView alloc]init];
  51. }
  52. //取出相应的球员对象
  53. NSDictionary *player=[_datasource objectAtIndex:row];
  54. onePlayer.name=[player objectForKey:@"name"];
  55. onePlayer.role=[player objectForKey:@"role"];
  56. onePlayer.number=[player objectForKey:@"number"];
  57. if(view)
  58. {
  59. //重用
  60. aCustomView=(HBCustomRowView *)view;
  61.  
  62. //让重用的视图再次调用drawRect方法
  63. [aCustomView setNeedsDisplay];
  64. }
  65. else
  66. {
  67. //新建
  68. aCustomView =[[HBCustomRowView alloc]initWithFrame:CGRectMake(0.0f, 0.0f, 240.0f, 60.0f)];
  69. aCustomView.backgroundColor=[UIColor clearColor];
  70. }
  71.  
  72. //配置自定义视图
  73. aCustomView.photo = [UIImage imageNamed:@"gaolin.jpeg"];
  74. aCustomView.name=onePlayer.name;
  75.  
  76. return aCustomView;
  77. }

IOS 取值控件(UIPicker)的使用方法的更多相关文章

  1. asp.net取HTML控件值

    asp.net取HTML控件值所有html表单里面的值控件,提交后都是以键值 key=value&key=value&……这样的形式提交给后台. radio也一样,会将选中的radio ...

  2. 无比迅速敏捷地开发iOS超精美控件

    目录 前言 设计 编码 PaintCode 前言 自从人生第一篇博客<iOS中的预编译指令的初步探究>问世以来 浏览量竟然达到了360多,(路过的大神勿笑!)这些浏览量使我兴奋异常但又令我 ...

  3. 从0到1搭建移动App功能自动化测试平台(2):操作iOS应用的控件

    转自:http://debugtalk.com/post/build-app-automated-test-platform-from-0-to-1-Appium-interrogate-iOS-UI ...

  4. tkinter中scale拖拉改变值控件(十一)

    scale拖拉改变值控件 使用户通过拖拽改变值 简单的实现: import tkinter wuya = tkinter.Tk() wuya.title("wuya") wuya. ...

  5. iOS基础UI控件介绍-Swift版

    iOS基础UI控件总结 iOS基础控件包括以下几类: 1.继承自NSObject:(暂列为控件) UIColor //颜色 UIImage //图像 2.继承自UIView: 只能相应手势UIGest ...

  6. iOS基本UI控件总结

    包括以下几类: //继承自NSObject:(暂列为控件) UIColor *_color;    //颜色 UIImage *_image;    //图像 //继承自UIView:只能相应手势UI ...

  7. iOS开发--UIKit控件之UISearchBar(搜索栏)

    今天因为需求原因,需要用到搜索控件:之前一直没有用到过这个控件,所以去百度了一下,找到一篇可以说很齐全的资料,感谢这位作者. 然而,我并没有找到可以更改字体大小的属性或方法,希望有知道的告诉我一声,谢 ...

  8. C#常用控件的属性以及方法(转载)

    -----以前看别人的,保存了下来,但是忘了源处,望见谅. C#常用控件属性及方法介绍 目录 1.窗体(Form) 2.Label (标签)控件 3.TextBox(文本框)控件 4.RichText ...

  9. WPF编程,通过Double Animation动态旋转控件的一种方法。

    原文:WPF编程,通过Double Animation动态旋转控件的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/art ...

随机推荐

  1. paip.c++ qt messagebox用法

    paip.c++ qt messagebox用法 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn.net ...

  2. hdu1114Piggy-Bank(DP完全背包)

    题意:在ACM可以做任何事情,必须准备和预算获得必要的财政支持.这次行动的主要收入来自不可逆绑定金钱(IBM).背后的想法很简单.每当一些ACM成员有任何小的钱,他把所有的硬币和成小猪银行抛出.你知道 ...

  3. 从VS转MyEclipse的15天使用体验

    脱离了VS强大的IDE功能之后,转向MyEclipse,发现很大差别,Java的IDE对比VS感觉弱很多,而且树形没有那么好用,Java里面是以包为主,区别与C#的最大就是,高亮提示关键字,这一点Ja ...

  4. Nio Client

    public class NIOClient { static int SIZE = 2; final static int bufferSize = 500 * 1024; static InetS ...

  5. ASPから広がり

    ASP是动态服务器页面(Active Server Page)外语缩写.[1]是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单.方便的编程工具.ASP的网页文 ...

  6. codeforces 633C. Spy Syndrome 2 hash

    题目链接 C. Spy Syndrome 2 time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  7. zoj 2587 Unique Attack 最小割判定

    题目链接 让你判断最小割是否唯一. 判断方法是, 先求一遍最大流, 然后从源点dfs一次, 搜索未饱和边的数目. 从汇点dfs一次, 同样也是搜索未饱和边的数目, 看总和是否等于n. 如果等于n那么唯 ...

  8. ffmpeg用法

    1. help ffmpeg.exe -h > help.txt 2. 解码: ffmpeg -i 123.264 123.yuv ffmpeg -i 123.264 -vframes 200  ...

  9. ExtJS 修改load paging时的参数

    ExtJS 的pagingToolbar 在翻页的时候传入的参数是固定的  分别是start 和 limit(其中limit的值就是store.pageSize的值) 如何在每次翻页的时候传入自己的参 ...

  10. PCB外形加工