【iOS开发】-UIPickerView
写在开头
- 昨天学习了iOS一个简单的控件。 UIPickerView;
- UIPickerView组件类似HTML都Select组件效果,提供数据供用户选择。可以通过plist文件提供数据。UIPickerView是一个选择器控件,可以生成单列的选择器,也可以生成多列的选择器,而且开发者完全可以自定义选择项的外观,用法十分灵活。UIPickerView直接继承了UIView,没有继承UIControl,因此,它不能像UIControl那样绑定事件处理方法,UIPickerView的事件处理由其委托对象完成
- 类似于上面的闹钟实现,UIPickerView也是有自己的代理方法和数据源。
UIPickerView实现简单的demo
- 要实现的代理
UIPickerViewDataSource
的方法- 协议中有两个必须实现的方法-分别是设置选择器的行和列数
UIPickerViewDelegate
返回UIPickerView中Component列的宽度- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component;返回UIPickerView中Component列中每行的高度- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component;当选择某一项Component列中的row行时的回调函数- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component- 标准的UIPickerView内容,只有字符串- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;自定义的UIPickerView内容,给每个列,行设置一个UIView对象- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view;----这里列为component,行row返回一个UIView用来显示在UIPickerView中。reusingView:(UIView *)
- 既然有数据源,那参考UITableView就有reloadData方法
- (void)reloadAllComponents;
- (void)reloadComponent:(NSInteger)component;
DEMO实现
- 我实现了3个列表的联动,第一个列表代表了组别,第二个列表对应第一个列表的内容,滑动第一个列表会出发delegate事件,刷新数据
- m文件的实现
#import "ViewController.h"@interface ViewController ()
//@property (nonatomic, copy)NSArray *pickerArray;
@property (nonatomic, copy)NSArray *directionArray;
@property (nonatomic, copy)NSArray *currentNameArray;
@property (nonatomic, copy)NSArray *nameArray1;
@property (nonatomic, copy)NSArray *nameArray2;
@property (nonatomic, copy)NSArray *nameArray3;
@property (nonatomic, copy)NSArray *nameArray4;
@property (nonatomic, copy)NSArray *Dict;
@property (nonatomic, copy)NSArray *endArray;
@property (nonatomic, copy)NSString *currentEndString;
@property (nonatomic, strong)UIPickerView *pickerView;
@end@implementation ViewController
- 初始化pickerView
self.pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, [UIScreen mainScreen].bounds.size.height - 220, [UIScreen mainScreen].bounds.size.width, 200)];self.pickerView.delegate = self;self.pickerView.dataSource = self;
- 初始化数组
self.directionArray = @[@"EDG", @"NBA", @"Bro", @"OS"];self.nameArray1 = @[@"Flander", @"Jiejie", @"Scout", @"Viper", @"Mekio", @"ClearLove"];self.nameArray2 = @[@"KingJames", @"Curry", @"Jordan", @"Durant", @"Harden"];self.nameArray3 = @[@"LdQ", @"ScMokey", @"HJC"];self.nameArray4 = @[@"MacOS", @"iOS", @"WatchOS", @"PadOS"];self.endArray = @[@"LOL", @"Stars", @"Friends", @"Study"];self.Dict = @[_nameArray1, _nameArray2, _nameArray3, _nameArray4];
- 数据源实现
- 返回3组 代表了3个列表,对于
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
方法,我的参考是component和tableview的indexpath的section一样,对于第一个列表component == 0返回第一列的长度
- Delegate实现
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
类似于tableview的返回indexpath的对应内容的方法
// 滑动触发事件
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {// 使用一个UIAlertView来显示用户选中的列表项if (component == 0) {self.currentNameArray = self.Dict[row];self.currentEndString = self.endArray[row];[self.pickerView reloadComponent:1];[self.pickerView reloadComponent:2];//这个方法的selectRow即可以表示你更新第一个列表之后是否更新到第二个列表的对应的row// BOOL类型的YES表示动画效果[self.pickerView selectRow:0 inComponent:1 animated:YES];[self.pickerView selectRow:0 inComponent:2 animated:YES];NSLog(@"选择了%@方向", self.directionArray[row]);} else {NSLog(@"%@", self.currentNameArray[row]);}
}
- 如何实现滑动第一个列表刷新第二个列表,如上述代码,在滑动component的时候刷新第二个列表和
- 对于代码里面的
[self.pickerView selectRow:0 inComponent:1 animated:YES]; [self.pickerView selectRow:0 inComponent:2 animated:YES];
方法,就是在滑动刷新完之后是否让回到row = 0的内容,animated即是是否开启动画效果 - 返回列表内容的函数
// 返回列表的内容
#pragma mark UIPickerViewDelegate;
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {// NSLog(@"%@", self.directionArray[row]);if (component == 0) {return self.directionArray[row];} else if (component == 1){return self.currentNameArray[row];} else {return self.currentEndString;}
}
// 返回列表的宽度
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component {return 130;
}
总结
- 很简单但是很实用的控件,在项目里也许会用到
【iOS开发】-UIPickerView相关推荐
- 【iOS开发每日小笔记(一)】UIPickerView 自动选择某个component的某个row
这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.它们可能会给用户体验.代码效率得到一些提升,或是之前自己 ...
- 【iOS 开发】Objective-C 运算符
博客地址 : http://blog.csdn.net/shulianghan/article/details/41624613 参考文章 : 1.[iOS 开发]Object-C 运算符 2.[iO ...
- IOS开发高级之点餐系统的实现-01
IOS开发高级之点餐系统的实现-01 // // ViewController.m // 01-点餐系统 // // Created by 鲁军 on 2021/2/11. //#import &qu ...
- iOS:iOS开发系列–打造自己的“美图秀秀”(中)
来源: KenshinCui 链接:http://www.cnblogs.com/kenshincui/p/3959951.html 其他状态设置 常用的图形上下文状态设置上面基本都用到了,我们不再一 ...
- ios开发问题汇总(一)
教程汇总 IOS比较好的网络教程:IOS编程浅蓝教程 IOS编程教程(五)自定义UITableView的表单元格 菜鸟教程-iOS教程 开发问题 实现页面切换,网上某些文章写的是: [self.nav ...
- iOS开发常用三方库、插件、知名博客
TimLiu-iOS iOS开发常用三方库.插件.知名博客等等,期待大家和我们一起共同维护,同时也期望大家随时能提出宝贵的意见(直接提交Issues即可). 持续更新... 版本:Objective- ...
- iOS开发第三方大全
UI 下拉刷新 EGOTableViewPullRefresh- 最早的下拉刷新控件. SVPullToRefresh- 下拉刷新控件. MJRefresh- 仅需一行代码就可以为UITableVie ...
- iOS开发基础知识--碎片37
iOS开发基础知识--碎片37 iOS开发基础知识--碎片37 iOS开发基础知识--碎片37 1:iOS 使用NJKWebViewProgress做webview进度条 引入头文件: #import ...
- iOS 开发的资源整理
本文整理了常用的iOS.mac开源项目及类库,是开发者必备的一份资料,现在分享给广大的iOS程序员兄弟们,希望给他们的开发工作带来帮助. UI 下拉刷新 EGOTableViewPullRefresh ...
- iOS开发-技术知识盘点总结(二)
1> UINavgationController使用 导航控制器之间切换供用一块导航条! 导航条的内容由栈定控制器决定! 显示在我们眼前的永远是栈顶控制器! 左上角的返回按钮文字是特例由上一个控 ...
最新文章
- Ubuntu 修改本地磁盘名称
- 关于float的说明
- android如何根据机顶盒区分用户,Android 上手机跟机顶盒应用开发的区别
- CocoStudio资源区导入Plist/PSD文件
- P2294 [HNOI2005]狡猾的商人
- 打开是什么样子的图片_情侣头像 | 无论是什么样子的你 我都好喜欢
- 退出出库复核是什么意思_电商仓储与传统仓储有什么不同?
- HBase从入门到精通系列:误删数据如何抢救?
- 电脑端的mafsvr服务关掉_想在电脑上玩手游,你得试试这款 quot;同屏助手quot; 了...
- macbook视频格式转换_如何将Mac视频格式转换
- C++输出透明背景字体
- Go的goroutine
- 人脸对齐:Wing Loss人脸关键点检测算法2018
- 树莓派启动自动连接WiFi
- Sort_1000pics数据集利用CNN实现图像分类
- linux 打开三维stl文件,三维stl文件查看工具下载
- 单片机、嵌入式错综复杂的关系分析
- yuv图解(YUV444,YUV422,YUV420,YV12,NV12,NV21)
- 【转载】浅谈 flash 中的设计模式:模版
- 前端应用开发架构图谱
热门文章
- UE4 如何将TextureRenderTarget2D保存为本地图片
- 30亿网民坐稳啦!互联网之门将要换钥匙
- 好程序员web前端学习路线分享css3中的渐进增强和降级
- java三种循环的流程图画法总结(for,while,do-while循环)
- 【单片记笔记】基于STM32F103的NEC红外发送接收使用同一个定时器的一体设计
- c 空间点到直线的垂足及距离计算
- 张艾迪(创始人):我们接管世界
- Java面试题-前端ES6
- Python pandas 读取csv/txt数据文件 python读取csv/txt文件
- 你还停留在使用Dagger2吗? 带你一步一步走进Dagger2的世界