UIPickerView是苹果开发生态中常见的选择器控件,它在需要从一组预定义的选项中选择时非常方便,例如日期或数据集。在示例应用中,使用它来选择汽车。这种标准控件还提供了 Voice Over 功能,帮助有障碍的用户更轻松地使用设备。
在探索网络资源时,偶然发现了一个由 Bruce Donnerson 在 YouTube 上发布的视频,它涵盖了 UIPickerView 的基础知识。决定实践并扩展这些知识,并与大家分享。
以下是一个简单的示例,展示了如何在 storyboard 和代码中使用 UIPickerView。要使用 UIPickerView,需要在 storyboard 中添加一个,并且不要忘记设置其代理。
代理机制是Objective-C中的一个基本原则,如果没有正确理解和使用,会遇到麻烦,并且可能无法发现问题所在。在看来,代理就像 Windows 中的消息接收者和处理器。幸运的是,Xcode 的 Interface Builder 很好地支持了这一点。在这里,可以看到 UIPickerView 对象已经设置了代理(在右上角)以及其输出。
最后,需要实现一些强制性的代理函数,以激活 UIPickerView。
使用 UIPickerView 就像使用表格视图一样简单。MVC 模型简化了数据流。一个不错的额外功能是通过 plist 加载数组。知道,总有一天会需要它的。
如果有人不理解 Interface Builder 或代理机制,那么他们就迷失了方向。最后但同样重要的是:Bruce Donnerson 已经扩展了他的教程,增加了一个关于 UIPickerView 的第二部分。它包含了一个包含三个选择器的示例。
以下是使用 UIPickerView 的Objective-C代码示例:
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIPickerView *pickerView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.pickerView.delegate = self;
self.pickerView.dataSource = self;
}
#pragma mark - UIPickerViewDataSource
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
return [self.cars count];
}
#pragma mark - UIPickerViewDelegate
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
return self.cars[row];
}
@end