// pickerView 的接口
@interface UIPickerView: UIView <NSCoding, UITableViewDataSource>
@property (nonatomic, assign) id<UIPickerViewDataSource> dataSource; // 默认为 nil, 弱引用
@property (nonatomic, assign) id<UIPickerViewDelegate> delegate; // 默认为 nil, 弱引用
@property (nonatomic) BOOL showsSelectionIndicator; // 默认为 NO
@property (nonatomic, readonly) NSInteger numberOfComponents;
-(NSInteger) numberOfRowsInComponent:(NSInteger) component; // 返回 某个组成部分的行数
// 返回 由代理实现的方法 pickerView: viewForRow: forComponent: reusingView:
// 如果那一行/部分 不可视 或 上面的代理方法未被实现,则返回 nil
-(UIView *) viewForRow:(NSInteger) row forComponent:(NSInteger) component;
// 重新加载整个视图 或者 某个单一的部分
-(void) reloadAllComponents;
-(void) reloadComponent:(NSInteger) component;
// 选择。 在这种情况下,在pickerView 中间显示合适的行
-(void) selectRow:(NSInteger)row inComponent:(NSInteger) component animated:(BOOL) animated;
// 把特殊的行显示到 pickerView 的中间
-(NSInteger) selectedRowInComponent:(NSInteger) component;
// 返回pickerView 显示在中部的行数 -1 所得数值
@end
// 遵守协议后,必须实现的方法
@protocol UIPickerViewDataSource<NSObject>
@required
// 返回要显示的 列 数
-(NSInteger) numberOfComponentsInPickerView:(UIPickerView *) pickerView;
// 返回 每个列的行数
-(NSInteger) pickerView:(UIPickerView *) pickerView numberOfRowsInComponent:(NSInteger) component;
@end
// 可选方法
@protocol UIPickerViewDelegate<NSObject>
@optional
// 为每个 列(component)返回长度 宽度
-(CGFloat) pickerView:(UIPickerView *) pickerView widthForComponent:(NSInteger) component;
-(CGFloat) pickerView:(UIPickerView *) pickerView rowHeightForComponent:(NSInteger) component;
// 一下方法返回一个 普通的 字符串对象 ,一个 NSAttributedString 对象 或是 一个视图(例如 UILabel),来显示该行的组成部分
// 由于视图的版本不同, 我们缓存所有隐藏的和未被使用的视图,传到后面重用
// 如果返回一个不同的对象, 先前的会被释放掉。 视图将被显示在矩形行的中间
-(NSString *) pickerView:(UIPickerView *) pickerView titleForRow:(NSInteger) row forComponent:(NSInteger)component;
-(NSAttributedString *) pickerView:(UIPickerView *) pickerView attributedTitleForRow:(NSInteger) row forComponent:(NSInteger) component NS_AVAILABLE_IOS(6_0); // 如果以上两个方法都被实现,则 attributed title 可用
-(UIView *) pickerView:(UIPickerView *) pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *) view;
-(void) pickerView:(UIPickerView *) pickerView didSelectRow:(NSInteger) row inComponent:(NSInteger) component;
@end