iOS学习之路-UIPickerView初认识与使用
来源:互联网 发布:混沌与秩序2随从数据库 编辑:程序博客网 时间:2024/05/01 22:33
一、简单的介绍
UIPickerView,即取值控件。而取值控件就行iOS的下拉菜单,虽然在界面呈现方面它和所谓的下拉菜单并不同,不过对于使用的目的和场景确实相同的。UIPickerView直接继承自UIView,没有继承UIControl,因此,它并不能像UIControl那样绑定事件处理方法,UIPickerView的事件处理由其代理对象来完成。UIPickView和UITableView的使用过程较相似,都需要一个数据源对象和一个代理对象。
二、UIPickView控件常用的方法和属性:
(1) - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView; 返回PickerView的列数
(2) - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;返回PickView的component列对应的行数
(3) - (nullableNSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component; 返回每一列每一行的内容
(4) - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component; 用户选中PickView的某一列和某一行时会调用该方法
(5) - (nullableNSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component修改PickView中component列row行的文本的样式
(6) - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(nullable UIView *)view 该方法返回的UIView的控件将直接作为UIPickView对应的component 列row行的列表项
(7) - (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component 设置component列对应的行高
(8) - (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component该方法设置component列对应的宽度
(9) - (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated该方法设置选中的UIPickView 第component列row行项,最后一个参数animated代表是否要用到动画
(10) @property(nonatomic,readonly)NSInteger numberOfComponents;获取UIPickerView指定列中包含的列表项的数量,该属性是只读的。
三、使用——省份城市的选择
(1)程序运行结果
(2)程序说明
当滚动第一列,即省份的列时,第二列即省份对应的城市的列也会跟着改变,当滚动停止时,下方的两个label会显示当前UIPickView选中的列和对应行的内容。
(3)部分源代码
#pragma mark - 代理方法/** * 返回一共有多少列 */- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ return 2;}/** * 返回第component列的行数 */- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ if (component == 0) { // 直接返回第0列的行数 return self.provinces.count; }else{ // 获取当前选中了哪一个省份 long Index = [self.pickerView selectedRowInComponent:0]; // 取得该省份的模型 KIMProvince *province = self.provinces[Index]; // 返回省份模型的cities数组的个数作为第二列的行数 return province.cities.count; }}/** * 返回每一列每一行的内容 */- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ if (component == 0) { // 取得第0列第row行的省份模型 KIMProvince *province = self.provinces[row]; // 返回省份模型的名称属性 return province.name; }else{ // 定义Index 记录当前选中了第0列的行数 long Index = [self.pickerView selectedRowInComponent:0]; // 取得该行的省份模型 KIMProvince *province = self.provinces[Index]; // 返回省份模型的cities数组的下标为row的名称 return province.cities[row]; }}/** * 将当前选中的列和行的内容显示到label */- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ if (component == 0) { // 若当前选中的是第0列,则刷新第1列的数据 [pickerView reloadComponent:1]; // 使cityLabel显示为第1列第0行的城市名称 [pickerView selectRow:0 inComponent:1 animated:YES]; } // 定义PIndex 记录当前选中了第0列的行数 long PIndex = [self.pickerView selectedRowInComponent:0]; // 取得该行的省份模型 KIMProvince *province = self.provinces[PIndex]; // 取得该省份模型的省份名称,并显示在provinceLabel self.provinceLabel.text = province.name; // 取得选中第1列的行数 long CIndex = [self.pickerView selectedRowInComponent:1]; // 取得省份模型的cities数组下标对应的城市名称,并显示在cityLabel self.cityLabel.text = province.cities[CIndex];}(4)注意事项及其问题
① 在storyboard拖出一个UIPickView时,要主要设置UIPickView的代理对象和数据源,这里我们都将代理对象和数据源都设置为控制器即ViewController。
② 程序中有一个bug。当同时滚动两列的时候,程序会崩溃。报错*** Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFArray objectAtIndex:]: index (6) beyond bounds (1)' 这是因为,当同时滚动两列时,第一列的省份对应着不同的城市,即第一列决定第二列的行数,当两列一起滚动时,就会发生数组越界的错误。
四、总结
UIPickView学习起来还是挺简单的,没有难的地方。在平时的项目中基本很少用这个,所以UIPickView一般都是用到的时候,在去查找资料的。实际开发的项目中的应用的话,一般有性别的选中,出生日期,所在的省份城市等等。
——爱分享,一起学,共成长。
- iOS学习之路-UIPickerView初认识与使用
- IOS 之 UIPickerView 学习总结
- iOS之UIPickerView使用(一)
- iOS学习之UIPickerView控件的简单使用
- iOS学习之UIPickerView控件的简单使用
- iOS学习之UIPickerView控件的简单使用
- iOS学习之UIPickerView控件的简单使用
- iOS学习之UIPickerView控件的简单使用
- iOS学习之UIPickerView控件的简单使用
- iOS学习之UIPickerView控件的简单使用
- IOS之UIPickerView的使用简单介绍
- iOS之UIPickerView的使用--单列选择器
- IOS UIPickerView 学习笔记
- iOS编程之UIPickerView
- IOS UIPickerView使用
- iOS 三级UIPickerView使用
- iOS UIPickerView的使用
- iOS UIPickerView 简单使用
- GCD与NSOperationQueue的区别
- Git修改远程仓库地址
- Linux目录操作
- YTU 2427: C语言习题 整数排序
- 验证四方定理
- iOS学习之路-UIPickerView初认识与使用
- Boost库的编译安装
- srs之简单优势
- Android中Window添加View的底层原理
- iOS适配注意点
- Linux进程操作
- mysql 查询死锁以及解锁
- Linux常用指令大全
- 多数据库的应用Spring+SpringMVC+Mybatis