UIPickerView详解:2-UIPickerView的基本使用
本节我们通过UIPickerView实现一个最简单的单列选择器,通过该案例来了解一下UIPickerView的代理协议、数据源协议以及属性的使用方法。在该案例中,通过UIPickerView展示几大城市名称,被选中的内容会在下方的label上展示出来。
准备工作
- 在控制器类中,添加需要使用的属性,并设置控制器类遵守UIPickerViewDataSource以及UIPickerViewDelegate协议
@interface ViewController ()<UIPickerViewDataSource,UIPickerViewDelegate>
@property(nonatomic,strong)UIPickerView *pickerView;
@property(nonatomic,strong)NSArray *dataArray;
@property(nonatomic,strong)UILabel *label;
@end
- 初始化dataArray属性,在其中添加若干个在UIPickerView中展示的选项
- (NSArray *)dataArray {
if (_dataArray == nil) {
_dataArray = @[@"北京",@"天津",@"南京",@"上海",@"唐山",@"重庆"];
}
return _dataArray;
}
- 初始化UIPickerView对象,对其外观属性进行简单定制,并设置其数据源对象以及代理对象为本控制器
- (UIPickerView *)pickerView {
if (_pickerView == nil) {
_pickerView = [[UIPickerView alloc]initWithFrame:CGRectMake(0, 50, [UIScreen mainScreen].bounds.size.width, 400)];
_pickerView.layer.masksToBounds = YES;
_pickerView.layer.borderWidth = 1;
_pickerView.dataSource = self;
_pickerView.delegate = self;
}
return _pickerView;
}
- 初始化用于展示被选中内容的UILabel控件
- (UILabel *)label {
if (_label == nil) {
_label = [[UILabel alloc]initWithFrame:CGRectMake(0, CGRectGetMaxY(self.pickerView.bounds)+100, [UIScreen mainScreen].bounds.size.width, 30)];
_label.backgroundColor = [UIColor yellowColor];
_label.textAlignment = NSTextAlignmentCenter;
_label.text = self.dataArray[0];
}
return _label;
}
- 添加子控件到控制器view上
- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:self.pickerView];
[self.view addSubview:self.label];
}
实现UIPickerViewDataSource中的方法
UIPickerViewDataSource中定义的两个方法用于设置UIPickerView的列数以及每列的选项数,要求必须实现。
- 设置列数,简单期间我们只显示一列
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1;
}
- 设置指定列中包含的选项数,此时我们根据dataArray数组中的元素个数设置
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
return self.dataArray.count;
}
实现UIPickerViewDelegate中的方法
UIPickerViewDelegate代理协议中的方法,为每个选项提供数据,并且可以监听用户的交互行为。
- 设置每个选项的显示内容
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
return self.dataArray[row];
}
- 获取用户的选择,并更新到自定义UILabel中
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
self.label.text = self.dataArray[row];
}
运行效果:
示例代码
https://github.com/99ios/10.4.2
文章发布时间为: December 1st , 2016 at 08:59 pm
最后编辑时间为: September 15th , 2017 at 03:13 am
本文由 99ios 创作,转载请注明出处
最后编辑时间为: September 15th , 2017 at 03:13 am
本文由 99ios 创作,转载请注明出处