UIPickerView
- 在开发过程中用到这个控件的机会比较小,常见的就是收获地址之类的,或者说选择性别,选择生日之类的,用的比较少。
- 研究的过程中就会发现,
UIPickerView
的使用方法和UITableView
很像
使用步骤
- 创建一个UIPickerView控件
- 设置UIPickerView的delegate和dataSource
- 实现dataSource方法
- 实现delegate方法
基础方法
// 设置代理
self.pickerView.delegate = self;
self.pickerView.dataSource = self;
#pragma mark - UIPickerViewDataSource
/**
* 显示多少列
*/
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
}
/**
* 第component列显示多少行
*/
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
}
#pragma mark - UIPickerViewDelegate
/**
* 第component列row行显示的文本
*/
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
}
/**
* 第component列的宽度
*/
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component{
}
/**
* 第component列的高度
*/
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{
}
/**
* 第component列row行显示的文本(富文本)
*/
- (nullable NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component{
}
/**
* 第component列row行显示的view(优先级大于文本)
*/
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(nullable UIView *)view{
}
/**
* 选中第component列的第row行
* 注意:这个方法必须用户主动拖动pickerView,才会调用
*/
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
}
//设置某一列的某一行选中
//不会触发pickerView:didSelectRow:inComponent:方法
[self.pickerView selectRow:index inComponent:i animated:YES];
联动注意点
- 用到联动的地方一般是地区选择,选中省份的时候要改变相应的市区
- 这个时候最容易出现的问题就是当两列都在滚动的时候会出现数组越界的问题
- 解决办法就是当第一列省份停下来的时候要记录下选中的编号,刷新市区的时候需要渠道特定的数据,不能一直变
//滚动停下来的时候调用
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component