(1)效果

(2)先在storyboard中设计界面,然后源码(直接在ViewController中码)

  1. #import "ViewController.h"
  2.  
  3. @interface ViewController ()<UIPickerViewDataSource,UIPickerViewDelegate>
  4. @property (nonatomic,strong) NSArray *foods;
  5. @property (weak, nonatomic) IBOutlet UITextField *fruitText;
  6. @property (weak, nonatomic) IBOutlet UITextField *MainfoodText;
  7. @property (weak, nonatomic) IBOutlet UITextField *BeverageText;
  8. @property (strong,nonatomic) UIPickerView *foodPicker;
  9. @property (weak, nonatomic) IBOutlet UITextField *dateText;
  10. @property(strong,nonatomic) UIDatePicker *datePicker;
  11. @end
  12.  
  13. @implementation ViewController
  14.  
  15. - (void)viewDidLoad {
  16. _foodPicker=[[UIPickerView alloc]init];
  17. _foodPicker.dataSource=self;
  18. _foodPicker.delegate=self;
  19. self.fruitText.inputView=_foodPicker;
  20. self.MainfoodText.inputView=_foodPicker;
  21. self.BeverageText.inputView=_foodPicker;
  22.  
  23. UIToolbar *foodToolBar=[[UIToolbar alloc]init];
  24. foodToolBar.barTintColor=[UIColor grayColor];
  25. foodToolBar.frame=CGRectMake(0, 0, 320, 38);
  26. UIBarButtonItem *randomBtn=[[UIBarButtonItem alloc]initWithTitle:@"随机" style:UIBarButtonItemStylePlain target:self action:@selector(randomPicker)];
  27. [randomBtn setTintColor:[UIColor whiteColor]];
  28. UIBarButtonItem *doneBtn=[[UIBarButtonItem alloc]initWithTitle:@"完毕" style:UIBarButtonItemStylePlain target:self action:@selector(doneClick)];
  29. [doneBtn setTintColor:[UIColor whiteColor]];
  30. UIBarButtonItem *spaceBtn=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
  31. foodToolBar.items=@[randomBtn,spaceBtn,doneBtn];
  32. self.fruitText.inputAccessoryView=foodToolBar;
  33. self.MainfoodText.inputAccessoryView=foodToolBar;
  34. self.BeverageText.inputAccessoryView=foodToolBar;
  35.  
  36. _datePicker=[[UIDatePicker alloc]init];
  37. _datePicker.datePickerMode=UIDatePickerModeDate;
  38. _datePicker.locale=[[NSLocale alloc]initWithLocaleIdentifier:@"zh_CN"];
  39. UIToolbar *dateToolBar=[[UIToolbar alloc]init];
  40. UIBarButtonItem *doneBtn1=[[UIBarButtonItem alloc]initWithTitle:@"完毕" style:UIBarButtonItemStylePlain target:self action:@selector(dateDoneClick)];
  41. dateToolBar.barTintColor=[UIColor grayColor];
  42. dateToolBar.frame=CGRectMake(0, 0, 320, 38);
  43. dateToolBar.items=@[spaceBtn,doneBtn1];
  44. self.dateText.inputView=_datePicker;
  45. self.dateText.inputAccessoryView=dateToolBar;
  46.  
  47. [super viewDidLoad];
  48. // Do any additional setup after loading the view, typically from a nib.
  49. }
  50.  
  51. -(void)randomPicker{
  52. for (int i=0; i<self.foods.count; i++) {
  53. int row=arc4random()%[self.foods[i] count];
  54. [self.foodPicker selectRow:row inComponent:i animated:YES];
  55. [self pickerView:nil didSelectRow:row inComponent:i];
  56. }
  57. }
  58.  
  59. -(void)doneClick{
  60. [self.view endEditing:YES];
  61. for (int i=0; i<self.foods.count; i++) {
  62. [self pickerView:nil didSelectRow:[self.foodPicker selectedRowInComponent:i] inComponent:i];
  63. }
  64. }
  65.  
  66. -(void)dateDoneClick{
  67. [self.view endEditing:YES];
  68. NSDateFormatter *formatter=[[NSDateFormatter alloc]init];
  69. [formatter setDateFormat:@"YYYY-MM-dd"];
  70. NSString *newDate=[formatter stringFromDate:self.datePicker.date];
  71. self.dateText.text=[NSString stringWithFormat:@"%@",newDate];
  72. }
  73.  
  74. -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
  75. return self.foods.count;
  76. }
  77.  
  78. -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
  79. return [self.foods[component] count];
  80. }
  81.  
  82. - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
  83. return self.foods[component][row];
  84. }
  85.  
  86. -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
  87. if (component==0) {
  88. self.fruitText.text=self.foods[component][row];
  89. }else if (component==1){
  90. self.MainfoodText.text=self.foods[component][row];
  91. }else{
  92. self.BeverageText.text=self.foods[component][row];
  93. }
  94. }
  95.  
  96. -(NSArray *)foods{
  97. if (_foods==nil) {
  98. _foods=[NSArray arrayWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"foods.plist" ofType:nil]];
  99. }
  100. return _foods;
  101. }
  102.  
  103. @end

(3)总结

——这些选择器,基本都是结合输入框来使用的,即代替原本的键盘。所以我们的设置主要是用到了输入框的inputView属性。

——并且这些弹出的选择器一般上面会有一个UIToolBar,这里用到的是inputAccessoryView属性。

——并且这个UIToolBar里面放得都是UIBarButtonItem元素。我们能够自己定义也能够使用默认的,最重要的是UIBarButtonSystemItemFlexibleSpace用来对齐布局的。

——这里用的UIPickerView仅仅是显示字符串。而有的则须要显示更高级的东西,所以就须要用到view。而不是title。

  1. - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;
  2.  
  3. - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view;

上面假设用到view作为UIPickerView内容,它也被设计成缓冲池回收机构。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

【iOS发展-70】点菜系统案例:使用文本框inputView和inputAccessoryView串联UIPickerView、UIDatePicker和UIToolBar的更多相关文章

  1. 【iOS发展-44】通过案例谈iOS重构:合并、格式化输出、宏观变量、使用数组来存储数据字典,而且使用plist最终的知识

    我们今天的情况下是第一个例子,下面的5一来通过切换页上一页下一页: (1)第一步,基本是以非常傻非常直接的方式来创建.这里用到的主要点有: --把对象变量设置为全局变量使得能够在其它方法中调用来设置它 ...

  2. IOS系统下虚拟键盘遮挡文本框问题的解决

    最近在项目中发现同样的代码在Android端微信网页中点击文本框唤出的虚拟键盘不会遮挡文本框,但是在IOS端的微信网页中点击文本框唤出的键盘却在大部分情况下会遮挡文本框 经过高人指点,这个问题终于解决 ...

  3. 机房收费系统总结之4——VB.NET 轻松解决判断文本框、组合框为空问题

    纵观机房收费系统,判断文本框.组合框为空问题无非两种情况.第一种:判断窗体中所有文本框.组合框是否为空.第二种:判断一部分文本框.组合框是否为空.下面看看是如何实现这两种情况的. 第一种:判断窗体中所 ...

  4. 给iOS开发新手送点福利,简述文本属性Attributes的用法

    给iOS开发新手送点福利,简述文本属性Attributes的用法   文本属性Attributes 1.NSKernAttributeName: @10 调整字句 kerning 字句调整 2.NSF ...

  5. JS(截取字符串,显示当前系统时间yyyy-MM-dd,从文本框得到的数值计算)

    截取字符串: var str = "1234567890"; var a = str.substring(0,8);    //==str.substring(8)---结果:12 ...

  6. iConvert Icons 图标转换生成利器,支持Windows, Mac OS X, Linux, iOS,和Android等系统

    这是一款在线图标转换工具,生成的图标支持Windows, Mac OS X, Linux, iOS, 和 Android等主流系统. 可以上传图标文件转化成另一个平台下的图标文件,例如将windows ...

  7. iOS 的 APP 在系统中如何适配不同的屏幕的尺寸

    iOS 的 APP 在系统中如何适配不同的屏幕的尺寸 标签: 2007年,初代iPhone发布,屏幕的宽高是 320 x 480 像素.下文也是按照宽度,高度的顺序排列.这个分辨率一直到iPhone ...

  8. iOS发展 ---- 至iPhone 6自适应布局设计 Auto Layout

    Apple从iOS 6增加了Auto Layout后開始就比較委婉的開始鼓舞.建议开发人员使用自适应布局,可是到眼下为止,我感觉大多数开发人员一直在回避这个问题,无论是不是因为历史原因造成的,至少他们 ...

  9. iOS发展 - 使用您自己的自定义字体

    一位同事问我最后一次,XXapp字体如何萌啊? 我也想提出萌哒哒的字体!然后,今天有这blog. 首先,我们正处于iOS发展,苹果给了我们很多的字体,当然,我就不一一列举在这里,英文,小汤表示看不懂啦 ...

随机推荐

  1. Directx11学习笔记【十一】 画一个简单的三角形--effect框架的使用

    这里不再介绍effect框架的具体使用,有关effect框架使用可参考http://www.cnblogs.com/zhangbaochong/p/5475961.html 实现的功能依然是画一个简单 ...

  2. SRM 620 D2L3: RandomGraph, dp

    称号:http://community.topcoder.com/stat? c=problem_statement&pm=13143&rd=15853 參考:http://apps. ...

  3. Android ListView分页载入(服务端+android端)Demo

    Android ListView分页载入功能 在实际开发中经经常使用到,是每一个开发人员必须掌握的内容,本Demo给出了服务端+Android端的两者的代码,并成功通过了測试. 服务端使用MyEcli ...

  4. css两种动态显示星星等级的比较(一星、两星、三星、四星、五星)

    原文:css两种动态显示星星等级的比较(一星.两星.三星.四星.五星) 以下是显示后的图片,相信在很多网站上都能看到这种效果,目前我知道两种实现方式 1.background-position加上一张 ...

  5. HDU 4916 树形dp

    Count on the path Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Othe ...

  6. 基于最简单的FFmpeg的AVDevice抽样(屏幕录制)

    =====================================================基于最简单的FFmpeg的AVDevice样品文章: 最简单的基于FFmpeg的AVDevic ...

  7. leetcode第一刷_Spiral Matrix II

    跟上一题的策略全然一样,这个题是要求保存当前增加的是第几个数,由于矩阵里面存的就是这个东西. 我有尝试想过是不是有一种方法能够直接推算出每一行的数据是哪些.但没过多久就放弃了.这样的方法尽管能够避免在 ...

  8. Ceph 存储集群

    Ceph 存储集群 Ceph 作为软件定义存储的代表之一,最近几年其发展势头很猛,也出现了不少公司在测试和生产系统中使用 Ceph 的案例,尽管与此同时许多人对它的抱怨也一直存在.本文试着整理作者了解 ...

  9. SQL Server 索引列的顺序——真的没关系吗

    原文:SQL Server 索引列的顺序--真的没关系吗 翻译自:http://www.mssqltips.com/sqlservertip/2718/sql-server-index-column- ...

  10. oracle record is locked by another user

    这个问题的根源先说说:午后更改数据库表,保存更改后,却没有提交完整.突然,去什么地方调试,拔掉网线,然后插上网线,这个出现record is locked by another user错误.网上找原 ...