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

注:[小白学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 - 11
int row = arc4random() % 12;
//----方法2:通过函数arc4random_uniform(u_int32_t)----
//生成 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;

4. 素材内容链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值