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[0];[self.view addSubview:self.pickerVIew];}//懒加载
- (UIPickerView *)pickerVIew{if (_pickerVIew == nil) {self.pickerVIew = [[UIPickerView alloc]initWithFrame:CGRectMake(0, 44, self.view.frame.size.width, 400)];_pickerVIew.layer.masksToBounds = YES;_pickerVIew.layer.borderWidth = 1;_pickerVIew.delegate = self;_pickerVIew.dataSource = self;}return _pickerVIew;
}#pragma mark ------- dateSource&&Delegate --------//设置列数
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{return 2;
}//设置指定列包含的项数
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{if (component == 0) {return self.provinceArray.count;}return [self.dictionary[self.selectedProvince] count];
}//设置每个选项显示的内容
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{if (component == 0) {return self.provinceArray[row];}return [self.dictionary[self.selectedProvince] objectAtIndex:row];
}//用户进行选择
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{if (component == 0) {self.selectedProvince = self.provinceArray[row];[self.pickerVIew reloadComponent:1];//设置第二列首选的始终是第一个[self.pickerVIew selectRow:0 inComponent:1 animated:YES];}
}@end

 

转载于:https://www.cnblogs.com/li-wei203/p/10803039.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462723.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

幻读和不可重复读

MySQL MySQL默认的隔离级别为RR&#xff0c;因此只会出现幻读的情况。 不会出现不可重复读的问题。 幻读 事务在插入已经检查过不存在的记录时&#xff0c;惊奇的发现这些数据已经存在了&#xff0c;之前的检测获取到的数据如同鬼影一般。 例子&#xff1a; 在事务1中&…

优化php效率,提高php性能的一些方法

1、在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下&#xff0c;尽量用 file_get_contents&#xff0c;因为他的效率高得多&#xff01;但是要注意file_get_contents在打开一个URL文件时候的PHP版本问题&#xff1b; 2、尽量的少进行文件操作&#x…

园区网VLAN应用实例

园区环境&#xff1a;一台核心路由器&#xff0c;一台核心交换机&#xff1b;四台汇聚层交换机&#xff1b;四台接入层交换机&#xff08;可根据实际需求和带宽的大小增加接入层的数量&#xff09;——接入层下接入大量的PC机。技术要求&#xff1a;通过VLAN的划分及VTP的设置实…

java 检查进程是否存在

以nginx进程为例子 private final static String NAME_STRING "nginx.exe";//传入进程名称processNamepublic static boolean findProcess() {BufferedReader bufferedReader null;try {Process proc Runtime.getRuntime().exec("tasklist -fi " "…

2021年简单总结

2021年的余额还有不到6小时就要结束了&#xff0c;在这辞旧迎新的时刻&#xff0c;心情是十分复杂的。2021年还是比较艰辛的&#xff0c;不管在工作、生活、家庭、养育小孩或亲戚往来方面&#xff0c;遇到的困难远远地超过了我的预期&#xff0c;但是也收获了很多&#xff0c;包…

3450

/* KMP来做532ms */// include file #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <cctype> #include <ctime>#include <iostream> #include <sstream> #include <fstream> #in…

GMF 教程 Mindmap 5

2019独角兽企业重金招聘Python工程师标准>>> 这一部分主要实现的是&#xff1a; 使用扩展的Plug-in为我们的Diagram添加一个自定义动作 Creating a Customization Plug-in 尽管可以给生成的代码添加备注generated NOT来避免下次重新生成代码时覆盖我们修改的代码…

invalid use of incomplete type struct 或者是class的解决办法

在写完代码之后进行编译时&#xff0c;提示"invalid use of incomplete type struct" 或者 "invalid use of incomplete type class" 的解决办法&#xff1a; 1、对应的头文件要包含&#xff0c;这个是必须的。 当时因为没有包含头文件&#xff0c;也汇报…

ASP.NETLinkButton的Click事件中获取CommandArgument的值

/// <summary> /// LinkButton的onClick事件 /// </summary> /// <param name"sender"></param> /// <param name"e"></param> protected void linkBtnName_Click(object sender, EventArgs e) { …

Linux的proc文件系统详解

引用自&#xff1a;http://bbs.chinaunix.net/thread-2002769-1-1.html Linux系统上的/proc目录是一种文件系统&#xff0c;即proc文件系统。与其它常见的文件系统不同的是&#xff0c;/proc是一种伪文件系统&#xff08;也即虚拟文件系统&#xff09;&#xff0c;存储的是当前…

Jmeter(四十二)_控制器下遍历一组参数

概述 在接口自动化的过程中&#xff0c;经常遇到需要遍历的参数组。jmeter在中&#xff0c;foreach控制器可以实现遍历参数&#xff0c;但是只能有一个入参。一旦遇到数组&#xff0c;foreach控制器表示我也无能为力。。。 为了解决这个问题&#xff0c;今天教大家一个实现数组…

模板类的定义和实现可以分开吗?

一个模板&#xff0c;在a.h中定义&#xff0c;在a.cc中实现&#xff0c;这样可以吗&#xff1f; 答案是不行的。 模板的定义和实现需要都写在头文件中。 有一种特例可以实现模板的定义和实现分别放在a.h 和 a.cc中&#xff0c;但是需要指定参数的类型。 但是这样导致每传入一…

业界资讯:adobe air 2.7 beta发布

http://labs.adobe.com/technologies/flashplatformruntimes/air2-7/ 前一段时间adobe 更新air 2.6的消息提升了air 性能 使进去移动平台性能得到改善&#xff0c;而今天adobe lab 再次放出adobe air2.7 beta版本 更新消息&#xff0c;这次更新会大幅提升 和改进一些功能&#…

JS 停留几秒后返回上一页

2019独角兽企业重金招聘Python工程师标准>>> <script type"text/javascript" language"javascript"> var i 5; intervalid setInterval("fun()", 1000); function fun(){if(i0){history.go(-1);clearInterval(intervalid);}i…

spring boot 分布式锁组件 spring-boot-klock-starter

基于redis的分布式锁spring-boot starter组件&#xff0c;使得项目拥有分布式锁能力变得异常简单&#xff0c;支持spring boot&#xff0c;和spirng mvc等spring相关项目 快速开始 spring boot项目接入 1.添加lock starter组件依赖&#xff0c;目前还没上传到公共仓库&#xff…

std::string中的find_first_of()和find_last_of()函数

编程语言: c/linux 在std::string中&#xff0c;有时需要找到一个string中最后一个或者第一个以某个特定的字符开始的位置或者下标&#xff0c;这时就需要使用find_first_of()和find_last_of()函数。 find_first_of() &#xff1a; 找到一个string中第一个以 某个 字符开始的…

Adsense加入黑名单的预防办法

说说预防被例如黑名单的办法。 GOOGLE同样知道竞争对手在点你的广告&#xff0c;这也会被记录在案&#xff08;Adsense同样知道他们的地理位置&#xff09;。 如果发现网站广告点击有异常情况&#xff0c;应该及时通知Google相关人员。万一被Google Adsense除名了&#xff0c;也…

【学习笔记4】Action名称的搜索顺序

2019独角兽企业重金招聘Python工程师标准>>> 1&#xff0e;获得请求路径的URI&#xff0c;例如url是&#xff1a;http://server/struts2/path1/path2/path3/test.action 2&#xff0e;首先寻找namespace为/path1/path2/path3的package&#xff0c;如果不存在这个pac…

std::map中的lower_bound与upper_bound

最近在工作中遇到了std::map中的lower_bound与upper_bound&#xff0c;再次记录下其功能和使用方式。 std::map<char, int> mp; mp.lower_bound<key> &#xff1a; 返回的是第一个大于、等于key的iterator&#xff0c;如果没有则返回空。 mp.upper_bound<key…

函数初识

函数#1.函数的定义 def#2.函数的调用#3.函数的返回值 return#4.函数的参数 #形参&#xff1a; # 位置参数 &#xff1a; 必须传 # *args &#xff1a;可以接收任意多个位置参数 # 默认参数 &#xff1a; 可以不传 # **kwargs &#xff1a; 可以…