UIPickerView基本使用
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基本使用的更多相关文章
- UIPickerView去掉背景上的黑线
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger) ...
- [ios]新手笔记-。-UIPickerView 关于伪造循环效果和延时滚动效果
查找了网上资料,循环效果绝大部分都是增加行数来制造循环的错觉,延时滚动就是利用NSTimer间隔出发滚动事件来制造滚动效果. 代码: #import <UIKit/UIKit.h>#imp ...
- UI控件(UIPickerView)
@implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; _item1 = [[NSArray alloc]i ...
- UIPickerView的使用(三)
前两篇文章 UIPickerView的使用(一) . UIPickerView的使用(二),学习了UIPickerView的单列选择器和双列选择器的使用. 现在我们一起学习相互依赖的多列选择器 1.遵 ...
- UIPickerView的使用(二)
上篇文章 UIPickerView的使用(一)学习了如何创建单列选择器,现在看一下如何创建多列选择器 多列选择器(以二列为例) 1.遵守协议和创建两个数据源 2.创建pickView 3.实现代理 / ...
- UIPickerView的使用(一)
简介:UIPickerView是一个选择器控件,它比UIDatePicker更加通用,它可以生成单列的选择器,也可生成多列的选择器,而且开发者完全可以自定义选择项的外观,因此用法非常灵活.UIPick ...
- UIPickerView选择器的使用方法
UIPickerView是选择列表内容的控件 使用方法与UITableView类似 都需要用array传入数据 用Delegate DataSource中的代理方法实现各种显示功能 @interfac ...
- iOS:选择器控件UIPickerView的详解和演示
选择器控件UIPickerView: 功能:它能够创建一个类似于密码锁式的单列或多列的选择菜单,用户可以通过它设置的代理来选择需要菜单中的任意的数据.例如创建日历.字体表(类型.大小.颜色).图库等. ...
- UIPickerView滚轮选择器视图
//必须实现两个协议 //数据源协议必须实现的两个方法 //选取器的输出借口singlePicker,并在故事版中选择该选取器将dataSource和delegate拖入视图控制器与之关联 //@pr ...
- iOs基础篇(二十二)—— UIPickerView、UIDatePicker控件的使用
一.UIPickerView UIPickerView是一个选择器控件,可以生成单列的选择器,也可生成多列的选择器,而且开发者完全可以自定义选择项的外观,因此用法非常灵活. 1.常用属性 (1)num ...
随机推荐
- wal2json docker 试用
基于官方的release 构建了一个docker 镜像,以下是测试使用 环境准备 docker-compose 文件 version: "3" services: mypg: ...
- [LeetCode] 79. Word Search 词语搜索
Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from l ...
- oracle--drop user 和 drop user cascade 的区别【转载】
drop user : 仅仅是删除用户, drop user ×× cascade :会删除此用户名下的所有表和视图. user Specify the user to be dropped. Ora ...
- JAVA基础系列:Arrays.binarySearch二分查找
首先,binarySearch方法为二分法查找,所以数组必须是有序的或者是用sort()方法排序之后的 1) binarySearch(Object[] a, Object key) a: 要搜索的 ...
- java基础-温故而知新
1.类和对象(实例)的关系 类就是对象的抽象(模板),对象就是类的实例 2.java设置模式--代理模式 定义:代理就是中介,例如租房子经常有中介,还有出票软件 飞猪,携程. 3.代理大纲分为两种:静 ...
- ffmpeg Operation not permitted 报错的解决过程记录
问题重现 由于视频的录制过程出现了一些小问题,需要重新将视频文件切割和合并,找了几个视频编辑软件来做这个事情,最终的结果都不是特别满意,当时已经挺晚的了,本来打算上床睡觉第二天再去想辙,从椅子上起身的 ...
- rust下根据protobuf的消息名创建对象实例
在C++里面, 我们可以根据一个消息的名称, 动态的创建一个实例 google::protobuf::Descriptor* desc = google::protobuf::DescriptorPo ...
- github 白嫖记(一)
位运算 按位操作符:0或者1之间的运算 a|b 或 任意一个为1结果为1 console.log(0 | 1) //1 console.log(1 | 0) //1 console.log(1 | 1 ...
- 【C++】STL各容器的实现,时间复杂度,适用情况分析
一.vector 1.概述 动态数组,在内存中具有连续的储存空间,在堆上分配内存,支持快速随机访问,在中间插入和删除慢,但在末尾插入和删除快 2.特点 1)拥有一段连续的内存空间,并且起始地址不变,因 ...
- Mysql 问题集
[1]实现如下需求 需求: 实现方案: (1)复现场景 SQL语句: -- [1]删除表 DROP TABLE tbl_name; -- [2]创建表 )); INSERT INTO tbl_name ...