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 ...
随机推荐
- python批量创建txt文件,以demo.txt内的内容为文件名
#批量创建txt文件import sys,osa=open("demo.txt")n=0aList=[]for line in a.readlines(): aList.appen ...
- zz先睹为快:神经网络顶会ICLR 2019论文热点分析
先睹为快:神经网络顶会ICLR 2019论文热点分析 - lqfarmer的文章 - 知乎 https://zhuanlan.zhihu.com/p/53011934 作者:lqfarmer链接:ht ...
- Windows/Linux下jdk环境配置
Windows 7下: Windows7 x64位系统 安装好java 1.点击开始菜单选择计算机选项右键选择属性选项 即可 2.然后在属性界面点击如图所示的高级系统设置选项 3.打开系统属性界面然后 ...
- 清理C盘临时文件脚本
@echo off echo 正在清除系统垃圾文件,请稍等...... del /f /s /q %systemdrive%\*.tmp del /f /s /q %systemdrive%\*._m ...
- RAMOS与PE 到底哪里不一样?
RAMOS与PE 到底哪里不一样? 答:PE只是RAMOS的雏形.无论是system身份还是Administrator身份登录的PE都不能算是真正意义上的RAMOS. 号外号外,下面开始跑题..... ...
- [LeetCode] 264. Ugly Number II 丑陋数之二
Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime factors ...
- php-fpm指定配置文件及php相关配置命令
[root@hostname centos7 sbin]# ./php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm. ...
- Oracle 10G RAC集群安装
一,基本环境配置 01,hosts cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.loc ...
- (六)golang--变量
什么是变量? 变量相当于内存空间中一个数据存储空间的表示,可以理解为一个门的房牌号:该区域有自己的名称(变量名)和类型(数据类型) 变量的使用步骤:申明--赋值--使用 package main im ...
- python接口自动化1-http协议简介
前言 知道接口测试的小伙伴都应清楚http协议了,如果你还不清楚,那么接口测试做不好,自动化接口就更做不好了.那么做接口测试前先了解下http: HTTP协议(HyperText Transfer P ...