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

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

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

<UIPickerViewDelegate,UIPickerViewDataSource>

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

//设置列数
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
return count;
} //设置指定列包含的项数
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ }

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

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

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

UIPickerView基本属性和方法:

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

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

重新加载列:

- (void)reloadAllComponents;
- (void)reloadComponent:(NSInteger)component;

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

- (NSInteger)selectedRowInComponent:(NSInteger)component;

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

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

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

#import "ViewController.h"

@interface ViewController ()<UIPickerViewDelegate,UIPickerViewDataSource>
@property(nonatomic,strong)UIPickerView *pickerVIew;
@property(nonatomic,strong)NSDictionary *dictionary;
@property(nonatomic,strong)NSArray *provinceArray;
@property(nonatomic,copy)NSString *selectedProvince;
@end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
self.dictionary = @{@"江苏":@[@"南京",@"徐州",@"镇江",@"无锡",@"常州"],@"河北":@[@"石家庄",@"保定",@"承德",@"沧州",@"秦皇岛"]};
//获取字典中所有的省份并排序保存
self.provinceArray = [[self.dictionary allKeys] sortedArrayUsingSelector:@selector(compare:)];
self.selectedProvince = self.provinceArray[];
[self.view addSubview:self.pickerVIew]; } //懒加载
- (UIPickerView *)pickerVIew{
if (_pickerVIew == nil) {
self.pickerVIew = [[UIPickerView alloc]initWithFrame:CGRectMake(, , self.view.frame.size.width, )];
_pickerVIew.layer.masksToBounds = YES;
_pickerVIew.layer.borderWidth = ;
_pickerVIew.delegate = self;
_pickerVIew.dataSource = self;
} return _pickerVIew;
} #pragma mark ------- dateSource&&Delegate -------- //设置列数
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
return ;
} //设置指定列包含的项数
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
if (component == ) {
return self.provinceArray.count;
}
return [self.dictionary[self.selectedProvince] count];
} //设置每个选项显示的内容
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
if (component == ) {
return self.provinceArray[row];
}
return [self.dictionary[self.selectedProvince] objectAtIndex:row];
} //用户进行选择
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
if (component == ) {
self.selectedProvince = self.provinceArray[row];
[self.pickerVIew reloadComponent:];
//设置第二列首选的始终是第一个
[self.pickerVIew selectRow: inComponent: animated:YES];
}
} @end

UIPickerView基本使用的更多相关文章

  1. UIPickerView去掉背景上的黑线

    - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger) ...

  2. [ios]新手笔记-。-UIPickerView 关于伪造循环效果和延时滚动效果

    查找了网上资料,循环效果绝大部分都是增加行数来制造循环的错觉,延时滚动就是利用NSTimer间隔出发滚动事件来制造滚动效果. 代码: #import <UIKit/UIKit.h>#imp ...

  3. UI控件(UIPickerView)

    @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; _item1 = [[NSArray alloc]i ...

  4. UIPickerView的使用(三)

    前两篇文章 UIPickerView的使用(一) . UIPickerView的使用(二),学习了UIPickerView的单列选择器和双列选择器的使用. 现在我们一起学习相互依赖的多列选择器 1.遵 ...

  5. UIPickerView的使用(二)

    上篇文章 UIPickerView的使用(一)学习了如何创建单列选择器,现在看一下如何创建多列选择器 多列选择器(以二列为例) 1.遵守协议和创建两个数据源 2.创建pickView 3.实现代理 / ...

  6. UIPickerView的使用(一)

    简介:UIPickerView是一个选择器控件,它比UIDatePicker更加通用,它可以生成单列的选择器,也可生成多列的选择器,而且开发者完全可以自定义选择项的外观,因此用法非常灵活.UIPick ...

  7. UIPickerView选择器的使用方法

    UIPickerView是选择列表内容的控件 使用方法与UITableView类似 都需要用array传入数据 用Delegate DataSource中的代理方法实现各种显示功能 @interfac ...

  8. iOS:选择器控件UIPickerView的详解和演示

    选择器控件UIPickerView: 功能:它能够创建一个类似于密码锁式的单列或多列的选择菜单,用户可以通过它设置的代理来选择需要菜单中的任意的数据.例如创建日历.字体表(类型.大小.颜色).图库等. ...

  9. UIPickerView滚轮选择器视图

    //必须实现两个协议 //数据源协议必须实现的两个方法 //选取器的输出借口singlePicker,并在故事版中选择该选取器将dataSource和delegate拖入视图控制器与之关联 //@pr ...

  10. iOs基础篇(二十二)—— UIPickerView、UIDatePicker控件的使用

    一.UIPickerView UIPickerView是一个选择器控件,可以生成单列的选择器,也可生成多列的选择器,而且开发者完全可以自定义选择项的外观,因此用法非常灵活. 1.常用属性 (1)num ...

随机推荐

  1. python函数中的不定长参数

    python自定义函数中有两中不定长参数,第一种是*name,第二种是**name.加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数.加了两个星号 ** 的参数会以字典的 ...

  2. 用eclipse开发Android,用Genymotion测试时报错adb发生错误

    每当我要运行安卓程序时,控制台就会报出 The connection to adb is down, and a severe error has occured. You must restart  ...

  3. centos虚拟机 与主机同步时间

    同步系统时间: yum install ntp ntpdate cn.pool.ntp.org ntpdate 0.centos.pool.ntp.org rm /etc/localtime ln - ...

  4. 【Spring AOP】AOP介绍(一)

    AOP(Aspect Oriented Programming) 面向切面编程,是Spring框架的一个重要组件. AOP应该算是对OOP(面向对象编程)的补充和完善.OOP引入封装.继承.多态等概念 ...

  5. SpringCloud介绍(一)

    Spring Cloud 是一套完整的微服务解决方案,基于 Spring Boot 框架,准确的说,它不是一个框架,而是一个大的容器,它将市面上较好的微服务框架集成进来,从而简化了开发者的代码量. 一 ...

  6. 【excel】=EXACT(A1,B1) 比较两个字符串是否相等

    相等返回true 不相等返回false

  7. Apex API 请求

    Salesforce与网络服务的通信 在Salesforce中可以利用Apex类与远程站点的网络服务进行通信.当远程网络服务支持REST方法时,开发者可以利用Apex代码进行数据的操作. 设置远程站点 ...

  8. 【51Nod1555】布丁怪

    [51Nod1555]布丁怪 题面 51Nod 题目大意: 给你一个\(n\times n\)的棋盘以及\(n\)个棋子,每个棋子坐标为\((x_i,y_i)\),保证棋盘的每一行或一列都有且仅有一个 ...

  9. [LeetCode] 236. Lowest Common Ancestor of a Binary Tree 二叉树的最小共同父节点

    Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...

  10. Nginx目录穿越漏洞

    Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx经常被做为反向代理,动态的部分被proxy_pass传递给后端端口,而静 ...