[小白学iOS编程01]UIPickerView控件学习_点菜系统

来源:互联网 发布:爱沙公主长裙淘宝店铺 编辑:程序博客网 时间:2024/04/29 17:27

注:[小白学iOS编程]是本小白根据某视频学习iOS编程过程的笔记记录,内容比较容易,高手勿喷。
转自请注明原博客地址:http://blog.csdn.net/fan_yufan/article/details/45896161

1. 效果图展示

这里写图片描述

2. 项目代码

2.1 在Main.storyboard中拖入UIPickerView控件,点击此控件后右键,选择dataSource以及delegate并把它们拖到View Controller中,然后实现dataSource和delegate协议<UIPickerViewDataSource,UIPickerViewDelegate>中的方法。

这里写图片描述
2.2 将foods.plist文件拖拽到Supporting Files中,注意下图中的勾选项。
这里写图片描述
2.3 观察下foods.plist中的数据。
food.plist中的数据

2.4 代码编写

////  HMViewController.m//  01-点菜系统//#import "HMViewController.h"@interface HMViewController ()<UIPickerViewDataSource,UIPickerViewDelegate>@property(nonatomic,strong)NSArray *foodsData;@property (weak, nonatomic) IBOutlet UILabel *fruitLabel;@property (weak, nonatomic) IBOutlet UILabel *mainFoodLabel;@property (weak, nonatomic) IBOutlet UILabel *drinkLabel;@property (weak, nonatomic) IBOutlet UIPickerView *pickerView;@end@implementation HMViewController#pragma mark 懒加载食物数据-(NSArray *)foodsData{    if (_foodsData == nil) {        NSString *filePath = [[NSBundle mainBundle] pathForResource:@"foods" ofType:@"plist"];        _foodsData = [NSArray arrayWithContentsOfFile:filePath];    }    return _foodsData;}- (void)viewDidLoad{    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.    NSLog(@"%@",self.foodsData);    //初始化label的数据    self.fruitLabel.text = self.foodsData[0][0];    self.mainFoodLabel.text = self.foodsData[1][0];    self.drinkLabel.text = self.foodsData[2][0];}#pragma mark -PickerView的数据源// returns the number of 'columns' to display.#pragma mark pickerView的组数- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{    return self.foodsData.count;}#pragma mark pickerView每一组的行数- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{    NSArray *items = self.foodsData[component];    return items.count;}#pragma mark -PickerView的代理#pragma mark 每一组每一行显示文字-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{    //1.获取对应组的数据    NSArray *items = self.foodsData[component];    return items[row];}-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{    NSLog(@"第几组: %d 第几行 %d",component,row);    //更新label的数据    //1.获取对应列(组)的数据    NSArray *items = self.foodsData[component];    if (component == 0) {        //NSArray *items = self.foodsData[component];        self.fruitLabel.text = items[row];    }else if(component == 1){        self.mainFoodLabel.text = items[row];    }else{        self.drinkLabel.text = items[row];    }}- (IBAction)randomMenu {    //指定区域 0 - 11    int random = arc4random_uniform(12);    //生成0.0 - 0.9    float randomF = arc4random_uniform(10) * 0.1;    //生成0.00 - 0.99    randomF = arc4random_uniform(100) * 0.01;    NSLog(@"%f",randomF);    //第一种方法    //随机第一组的数据//    int row1 = arc4random() % 12;//    int row2 = arc4random() % 15;//    int row3 = arc4random() % 10;//    NSLog(@"%d",row1);//    //    //更新lable数据//    [self pickerView:nil didSelectRow:row1 inComponent:0];//    [self pickerView:nil didSelectRow:row2 inComponent:1];//    [self pickerView:nil didSelectRow:row3 inComponent:2];//    //    //更新PickerView的选中的行//    [self.pickerView selectRow:row1 inComponent:0 animated:YES];//    [self.pickerView selectRow:row2 inComponent:1 animated:YES];//    [self.pickerView selectRow:row3 inComponent:2 animated:YES];    //第二种方法    int colum = self.foodsData.count;    for (int i = 0; i < colum ; i++){        //获取旧的选中行        int oldRow = [self.pickerView selectedRowInComponent:i];        NSArray *items = self.foodsData[i];        int  rowCount = items.count;        int randomRow = oldRow;        //获取旧的随机数与新的随机数一样的话,再随机        while (oldRow == randomRow) {            randomRow = arc4random() % rowCount;        }        [self pickerView:nil didSelectRow:randomRow inComponent:i];        [self.pickerView selectRow:randomRow inComponent:i animated:YES];    }}@end

3. 知识点总结

3.1 UIPickerView 中数据源和代理方法

#pragma mark -PickerView的数据源方法//告诉PickerView中有多少组,即有多少个滚轮。- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;//告诉PickerView中"对应的组"中的有多少行。- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;
#pragma mark -PickerView的代理方法//告诉PickerView中每一组每一行显示文字。-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;//当手指滑动PickerView时,PickerView会告诉我们 现在选择的是 第几组(component)第几行(row)。-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component;
//获取选中行的行号int row = [self.pickerView selectedRowInComponent:i]
//通过"代码"的形式 设置(选中) 某一组某一行[self.pickerView selectRow:randomRow inComponent:i animated:YES];

3.2 随机数的生成

//----方法1:通过函数arc4random()----//生成 0 - 11int row = arc4random() % 12;
//----方法2:通过函数arc4random_uniform(u_int32_t)----//生成 0 - 11int random = arc4random_uniform(12);//生成0.0 - 0.9float randomF = arc4random_uniform(10) * 0.1;//生成0.00 - 0.99randomF = arc4random_uniform(100) * 0.01;

4. 素材内容链接

  • foods.plist
0 0
原创粉丝点击