1、注意点:
首先,需要注意,设置UIPickerView的【数据源】以及【代理】,这里要遵循一个三部曲:
- 遵守协议
- 设置代理/数据源
- 实现方法
协议如下:
<UIPickerViewDataSource,UIPickerViewDelegate>
苹果的协议的命名都很规范,都以类名开头,以DataSource或Delegate结尾,所以,这里不光是这个控件,在自学的过程中,这样的规律也可以让自己受益匪浅
当实现了DataSource后,系统的编译器会产生⚠️,提示让我们实现一些协议中requered的方法,我们可以按住【cmd】键,点击DataSource协议,进入协议头文件看一下,我们可以看到如下图所示的内容:
@protocol UIPickerViewDataSource<NSObject>
@required
// returns the number of 'columns' to display.
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;
// returns the # of rows in each component..
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;
@end
这里,我们看到有两个方法,我的老师袁振告诉我说,学习一个方法,需要注意两点,一个是方法的作用,一个是方法什么时候调用,这里,我们依照这个方式来学习这两个方法。
其实,如果英语好的朋友已经知道这两个方法的作用了,注释很清楚。而对于英语不好的朋友,可以看一下我这篇文章,其实英语还是很重要的,废话不多说,我们先来说这两个方法的作用:
1.返回需要显示多少列
2.返回component列有多少行
这两个是数据源方法,在加载控件的时候,会调用。
设置好以后这时候我们来运行一下,会看到内容全都是问号。这是因为我们仍需要一个方法,来告诉pickerView来显示什么内容,那为什么不把这个也定义为数据源方法呢?我猜是因为这里需要显示什么,有两个方法:
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view;
第一个,返回值是一个NSString那么,我们就知道了,第一个方法可以让控件显示一些文字,而第二个,如此类推,它会让控件显示一些视图。有了这三个方法,就可以简单地显示一个UIPickerView了。