UIPickerView详解:1-UIPickerView简介
UIPickerView是一个选择器控件,它可以生成单列选择器,也可以生成多列选择器,而且开发者完全可以自定义可选项的外观,用法非常灵活。比如:淘宝中的地址选择器就是如此。UIPikerView继承自UIView,因此,它的事件处理可以由其代理完成。
UIPickerViewDataSource数据源协议
UIPickerView中展示的数据项都是通过其数据源对象来实现的,UIPickerView的数据源对象需要遵守UIPickerViewDataSource数据源协议。在UIPickerViewDataSource数据源协议中定义了如下两个方法,这两个方法都是强制必须要实现的。
- 设置UIPickerView中所包含的列数,在UIPickerView中列被称为Component
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;
- 设置UIPickerView中每个列Component所包含的行数,该方法中的参数component可以获取当前设置的列序号
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;
UIPickerViewDelegate代理协议
在UIPickerViewDataSource数据源协议中,仅仅提供了UIPickerView包含了几列以及每一列的行数,而每一行展示的选项是通过UIPickerViewDelegate代理协议中的方法进行设置的。
- (nullable NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;
为了获取用户当前选中的选项,在UIPickerViewDelegate中也提供了对应的方法,可以使我们获取到当前的选中项,以便做进一步的处理。
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component;
除此之外,UIPickerViewDelegate中还提供了一些用于定制UIPickerView选项外观的方法,例如,我们可以设置列宽、行宽等操作。
- 设置列宽
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component;
- 设置行宽
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component;
- 为指定行设置定制外观
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(nullable UIView *)view;
基本属性和方法介绍
由于UIPickerView继承自UIView,因此UIPickerView的外观属性的定制可以使用UIView中的一些属性或方法。另外,在UIPickerView类中,还提供了一些特殊的属性以及方法,需要重点关注。
- 设置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;
文章发布时间为: December 1st , 2016 at 08:58 pm
最后编辑时间为: September 15th , 2017 at 03:12 am
本文由 99ios 创作,转载请注明出处
最后编辑时间为: September 15th , 2017 at 03:12 am
本文由 99ios 创作,转载请注明出处