源码下载地址:http://download.csdn.net/detail/liu537192/8484707
效果图:
核心代码:
//
// JLViewController.m
// 01-点菜系统
//
// Created by XinYou on 15-3-9.
// Copyright (c) 2015年 vxinyou. All rights reserved.
//
#import "JLViewController.h"
@interface JLViewController ()
@property (weak, nonatomic) IBOutlet UIPickerView *pickerView;
// 用于显示水果的label
@property (weak, nonatomic) IBOutlet UILabel *fruitLabel;
// 用于显示主菜的label
@property (weak, nonatomic) IBOutlet UILabel *mainLabel;
// 用于显示饮料的label
@property (weak, nonatomic) IBOutlet UILabel *drinkLabel;
// "随机"按钮
- (IBAction)randomFood;
@property (nonatomic, strong)NSArray *foods;
@end
@implementation JLViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// 设置数据源
self.pickerView.dataSource = self;
// 设置代理
self.pickerView.delegate = self;
for (int i = 0; i < self.foods.count; i++) {
// 手动调用pickerView的代理方法
[self pickerView:nil didSelectRow:0 inComponent:i];
}
}
/**
* 随机选择食物
*/
- (IBAction)randomFood {
// arc4random() 这是C语言的方法,能产生大于或等于0的随机数
for (int component = 0; component < self.foods.count; component++) {
// 第component列数组的总长度
int foodCount = [self.foods[component] count];
// 上一次选中的行号
int oldRow = [self.pickerView selectedRowInComponent:component];
// 本次要选中的行号
int newRow = oldRow;
// 保证每次随机每一行都不一样
while (newRow == oldRow) {
newRow = arc4random() % foodCount;
}
// 让pickerView进行滚动,选中第compoent列的第row行
[self.pickerView selectRow:newRow inComponent:component animated:YES];
// 设置各个label的文字
[self pickerView:nil didSelectRow:newRow inComponent:component];
}
}
- (NSArray *)foods{
if (_foods == nil) {
// 获取plist文件的路径
NSString *path = [[NSBundle mainBundle] pathForResource:@"foods.plist" ofType:nil];
// 加载plist文件中的数据
NSArray *foodArray = [NSArray arrayWithContentsOfFile:path];
_foods = foodArray;
}
return _foods;
}
#pragma mark - 数据源方法
/**
* pickerView总共有多少列
*/
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
return self.foods.count;
}
/**
* pickerView每列各有多少行
*/
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
NSArray *food = self.foods[component];
return food.count;
}
#pragma mark - 代理方法
/**
* pickerView每一行显示的字符串
*/
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
NSArray *food = self.foods[component];
return food[row];
}
/**
* 选中了pickerView的某一行
*/
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
if (0 == component) {// 水果
self.fruitLabel.text = self.foods[component][row];
}else if (1 == component){// 主菜
self.mainLabel.text = self.foods[component][row];
}else if (2 == component){// 饮料
self.drinkLabel.text = self.foods[component][row];
}
}
@end