zoukankan      html  css  js  c++  java
  • iOS- UIPickerView餐厅点餐系统

    在餐厅里的点餐系统的核心控件就是UIPickerView

    今天晚上在整理以前的项目笔记时,特意把UIPickerView单独拿出来,做了一个简陋的点餐道具。

    因为没有素材图片,所有大家将就看看吧

     

     

    0.用到的主要方法  

    - 数据源方法

    有多少列
    - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { return _foods.count; } 第component列有多少行 - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { NSArray *array = _foods[component]; return array.count; } 每行显示什么内容、第component列第row行显示什么文字 - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { return _foods[component][row]; } - 代理方法
    选中了第component列第row行就会调用 // 只有手动选中了某一行才会通知代理 - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 2.选中某一行
    [_pickerView selectRow:index inComponent:component animated:YES];

    1.UI界面搭建,将需要用到的控件拖入头文件  

    UIPickerView

    @interface ViewController : UIViewController
    @property (weak, nonatomic) IBOutlet UIPickerView *pickerView;
    @property (weak, nonatomic) IBOutlet UILabel *fruit;
    @property (weak, nonatomic) IBOutlet UILabel *meat;
    @property (weak, nonatomic) IBOutlet UILabel *water;
    - (IBAction)randomFood:(id)sender;
    
    @end

    2.初始化数据  

    记得实现数据源和代理

    <UIPickerViewDataSource, UIPickerViewDelegate>

    @interface ViewController () <UIPickerViewDataSource, UIPickerViewDelegate>
    {
        NSArray *_foods;
    }
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        
        // 1.加载数据
        _foods = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"foods.plist" ofType:nil]];
        
        // 2.设置默认值
    //    _fruit.text = _foods[0][0];
    //    _meat.text = _foods[1][0];
    //    _water.text = _foods[2][0];
        int count = _foods.count;
        for (int i = 0; i < count; i++) {
            [self pickerView:nil didSelectRow:0 inComponent:i];
        }
    }

    3.实现数据源方法用于展示数据  

    #pragma mark - 数据源
    #pragma mark 有多少列
    - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
    {
        return _foods.count;
    }
    
    #pragma mark 第component列有多少行
    - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
    {
        NSArray *array = _foods[component];
        
        return array.count;
    }
    
    #pragma mark 每行显示什么内容、第component列第row行显示什么文字
    - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
    {
        return _foods[component][row];
    }

    4.实现代理方法,当选定时更新UI界面  

    #pragma mark - 代理
    #pragma mark 选中了第component列第row行就会调用
    // 只有手动选中了某一行才会通知代理
    - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
    {
        // 1.取出选中那行的文字
        NSString *text = _foods[component][row];
        
        // 2.显示到对应的label上面
        if (component == 0) { // 水果
            _fruit.text = text;
        } else if (component == 1) { //
            _meat.text = text;
        } else { // 饮料
            _water.text = text;
        }
    }

    5.实现随机点餐功能  

    #pragma mark 随机
    - (IBAction)randomFood:(id)sender {
        // 1.随机选中第0列的某一行(水果)
    //    [self randomCompoment:0];
    //    
    //    // 2.随机选中第1列的某一行(肉)
    //    [self randomCompoment:1];
    //    
    //    // 3.随机选中第2列的某一行(饮料)
    //    [self randomCompoment:2];
        
        int count = _foods.count;
        for (int i = 0; i < count; i++) {
            [self randomCompoment:i];
        }
    }
    
    #pragma mark 随机选中某一列的方法
    - (void)randomCompoment:(int)component
    {
        // 0.获得第component列选中的行号
        int selectedRow = [_pickerView selectedRowInComponent:component];
        
        // 1.随机生成行号
        int index = selectedRow;
        while (index == selectedRow) {
            index = arc4random_uniform([_foods[component] count]);
        } // 一定会生成不一样的行号
        
        // 2.选中某一行
        [_pickerView selectRow:index inComponent:component animated:YES];
        
        // 3.更改文字
        [self pickerView:nil didSelectRow:index inComponent:component];
    }

    作者: 清澈Saup
    出处: http://www.cnblogs.com/qingche/
    本文版权归作者和博客园共有,欢迎转载,但必须保留此段声明,且在文章页面明显位置给出原文连接。 

  • 相关阅读:
    杨老师课堂_VBA学习教程之一键合并所有文件
    无题
    杨老师课堂_VBA学习教程之VBA中使用函数
    杨老师课堂_Java核心技术下之控制台模拟文件管理器案例
    杨老师课堂之JavaScript定时器_农夫山泉限时秒杀案例
    交换机级联,堆叠,集群技术介绍
    IP划分
    光纤
    交换机
    URL中“#” “?” &“”号的作用
  • 原文地址:https://www.cnblogs.com/qingche/p/3565243.html
Copyright © 2011-2022 走看看