1.先看視圖
2.拖線設定資料源和代理後,代碼如下:
//
// ViewController.m
#import "ViewController.h"
@interface ViewController ()<UIPickerViewDataSource,UIPickerViewDelegate>
@property (weak, nonatomic) IBOutlet UIPickerView *pickerView;
@property(nonatomic,strong)NSArray *foods;
@property (weak, nonatomic) IBOutlet UILabel *frultLabel;
@property (weak, nonatomic) IBOutlet UILabel *mainLabel;
@property (weak, nonatomic) IBOutlet UILabel *drinkLabel;
@end
@implementation ViewController
/**
* 随機
*/
- (IBAction)random
{
// pickerView每一列随機選中一行
for (int i=0; i<3; i++) {
NSInteger count = [self.foods[i] count];
int random = arc4random_uniform((u_int32_t)count);
[_pickerView selectRow:random inComponent:i animated:YES];
// 随機選中的文字展示到label
[self pickerView:_pickerView didSelectRow:random inComponent:i];
}
}
- (NSArray *)foods
{
if (_foods == nil) {
// 加載本地plist檔案
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"foods" ofType:@"plist"];
// 從檔案中建立數組
_foods = [NSArray arrayWithContentsOfFile:filePath];
}
return _foods;
}
- (void)viewDidLoad {
[super viewDidLoad];
// 初始化label資料
for (int i = 0; i < 3; i++) {
[self pickerView:_pickerView didSelectRow:0 inComponent:i];
}
}
#pragma mark - UIPickerViewDataSource
/**
* 傳回pickerView有多少列
*/
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return self.foods.count;
}
/**
* 傳回第component列有多少行
*/
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return [self.foods[component] count];
}
#pragma mark - UIPickerViewDelegate
/**
* 傳回第component列的第row行的标題
*/
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return self.foods[component][row];
}
/**
* 選中了第component列的第row行的時候調用
* 注意:這個方法必須使用者主動推動pickerView
*/
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
// NSLog(@"%ld,%ld",component,row);
switch (component) {
case 0:
_frultLabel.text = self.foods[component][row];
break;
case 1:
_mainLabel.text = self.foods[component][row];
break;
case 2:
_drinkLabel.text = self.foods[component][row];
break;
}
}
@end
3.示範效果