经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » iOS » 查看文章
UIPickerView基本使用
来源:cnblogs  作者:iosMrLi  时间:2019/5/5 8:55:54  对本文有异议

UIPickerView是很常用的一个UI控件,在各种购物平台选择地址时候都是必备的,下面我们来说一下具体的使用

首先UIPickerView的创建,与多数控件一样,分配内存并设置位置尺寸。

重要的的是代理与数据源,设置代理和数据源后服从代理和数据源协议

  1. <UIPickerViewDelegate,UIPickerViewDataSource>

 

其中数据源里面有两个必须实现的方法

  1. //设置列数
  2. - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
  3. return count;
  4. }
  5. //设置指定列包含的项数
  6. - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{


  7. }

UIPickerView是可以只设置单列的,列被称为component,此时返回的列数为1即可,单更多时候需要的是多列情况,此时设置返回值为自己所需要的列数即可。

在UIPickerViewDataSource数据源协议中,仅仅提供了UIPickerView包含几列以及每一列的项数,而每一行展示的选项是通过UIPickerViewDelegate协议中的方法来设置的。

  1. //设置每个选项显示的内容
  2. - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
  3. }
  4. //获取用户当前选中的选项
  5. - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
  6. }

 

UIPickerView基本属性和方法:

设置数据源对象以及代理对象

  1. @property(nullable,nonatomic,weak) id<UIPickerViewDataSource> dataSource;
  2. @property(nullable,nonatomic,weak) id<UIPickerViewDelegate> delegate;

 

重新加载列:

  1. - (void)reloadAllComponents;
  2. - (void)reloadComponent:(NSInteger)component;

 

获取当前选中的选项序号:

  1. - (NSInteger)selectedRowInComponent:(NSInteger)component;

 

指定选中的项显示在中间位置,一般设置第一项放在中间:

  1. - (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated;

下面是一个简单的完整示例:

  1. #import "ViewController.h"
  2.  
  3. @interface ViewController ()<UIPickerViewDelegate,UIPickerViewDataSource>
  4. @property(nonatomic,strong)UIPickerView *pickerVIew;
  5. @property(nonatomic,strong)NSDictionary *dictionary;
  6. @property(nonatomic,strong)NSArray *provinceArray;
  7. @property(nonatomic,copy)NSString *selectedProvince;
  8. @end
  9.  
  10. @implementation ViewController
  11. - (void)viewDidLoad {
  12. [super viewDidLoad];
  13. self.dictionary = @{@"江苏":@[@"南京",@"徐州",@"镇江",@"无锡",@"常州"],@"河北":@[@"石家庄",@"保定",@"承德",@"沧州",@"秦皇岛"]};
  14. //获取字典中所有的省份并排序保存
  15. self.provinceArray = [[self.dictionary allKeys] sortedArrayUsingSelector:@selector(compare:)];
  16. self.selectedProvince = self.provinceArray[0];
  17. [self.view addSubview:self.pickerVIew];
  18. }
  19. //懒加载
  20. - (UIPickerView *)pickerVIew{
  21. if (_pickerVIew == nil) {
  22. self.pickerVIew = [[UIPickerView alloc]initWithFrame:CGRectMake(0, 44, self.view.frame.size.width, 400)];
  23. _pickerVIew.layer.masksToBounds = YES;
  24. _pickerVIew.layer.borderWidth = 1;
  25. _pickerVIew.delegate = self;
  26. _pickerVIew.dataSource = self;
  27. }
  28. return _pickerVIew;
  29. }
  30. #pragma mark ------- dateSource&&Delegate --------
  31.  
  32. //设置列数
  33. - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
  34. return 2;
  35. }
  36. //设置指定列包含的项数
  37. - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
  38. if (component == 0) {
  39. return self.provinceArray.count;
  40. }
  41. return [self.dictionary[self.selectedProvince] count];
  42. }
  43. //设置每个选项显示的内容
  44. - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
  45. if (component == 0) {
  46. return self.provinceArray[row];
  47. }
  48. return [self.dictionary[self.selectedProvince] objectAtIndex:row];
  49. }
  50. //用户进行选择
  51. - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
  52. if (component == 0) {
  53. self.selectedProvince = self.provinceArray[row];
  54. [self.pickerVIew reloadComponent:1];
  55. //设置第二列首选的始终是第一个
  56. [self.pickerVIew selectRow:0 inComponent:1 animated:YES];
  57. }
  58. }
  59. @end

 

原文链接:http://www.cnblogs.com/li-wei203/p/10803039.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号