zoukankan      html  css  js  c++  java
  • UIPickerView的使用(菜单系统)

    UI进阶-第01天

    /**

    摘要:

    掌握UIPicderView的使用

    掌握键盘工具条的使用

    */

    一、UIPikcerView的使用

    》打开官方文档 查看DatePicker/UIPikcerView在iOS6与iOS7的区别

    查找至UserExperience — Guides — iOS 7 UI Transition Guide — Controls - Picker

    "【案例: 点菜系统】"

    //放个点菜系统的截图

     

    》使用UIPikcerView控件实现点菜系统

    》掌握UIPikcerView的代理与数据源与代理方法的使用,与TableView类比

    (1)UITableView的每一行Cell是在数据源里,而UIPikcerView的每一行View是在代理里

    (2)UIPickerView每一行长什么样有两个方法

    //-(NSString *)pickerView: titleForRow: forComponent:直接返回一个字符串

    //-(UIView *)pickerView: viewForRow: forComponent: reusingView:直接返回一个view

    》掌握使用代理的【-(NSString *)pickerView:titleForRow:forComponent:】方法显示一组数据与显示多组数据

    》加载foods.plist文件,显示多组数据

    》监听每组选中的行,更改Label数据

    (1)使用代理方法【-(void)pickerView:didSelectRow:inComponent:】

    》实现默认选中每一组的第一行数据

    (1)在viewDidLoad方法调用【-(void)pickerView:didSelectRow:inComponent:】实现

    》实现随机选菜单

    (1)实现Label数据的随机变更

    (2)实现pickerView的数据随机变更

    (3)每一组对应行的数据一定要不同上一次的行数据

    /**

    *获取旧行与新行,使用while循环,

        //旧行

        NSInteger oldRow = [self.pickerView selectedRowInComponent:i];

        //随机新行

        NSInteger newRow = arc4random_uniform((int)rows);

        //新行与旧行相同,再随机,直到不两只

        while (newRow == oldRow) {

            newRow = arc4random_uniform((int)rows);

        }

    */

     

     ViewController.m

    //  01.点菜系统

    //

    //  Created by Yong Feng Guo on 14-12-16.

    //  Copyright (c) 2014年 Fung. All rights reserved.

    //

    #import "ViewController.h"

    @interface ViewController ()<UIPickerViewDataSource,UIPickerViewDelegate>

    @property(nonatomic,strong)NSArray *foods;

    @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 ViewController

    /**

     *懒加载食物数据

     */

    -(NSArray *)foods{

        if (!_foods) {

            NSString *foodsPath = [[NSBundle mainBundle] pathForResource:@"foods.plist" ofType:nil];

            _foods = [NSArray arrayWithContentsOfFile:foodsPath];

        }

       

        return _foods;

    }

    - (void)viewDidLoad {

        [super viewDidLoad];

        // Do any additional setup after loading the view, typically from a nib.

        //默认显示每一组的第一行数据

        NSInteger components = self.foods.count;

        for (NSInteger i = 0; i<components; i++) {

            [self pickerView:nil didSelectRow:0 inComponent:i];

        }

    }

    #pragma mark -UIPickerView数据原

    #pragma mark 多少组

    - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{

        return self.foods.count;

    }

    #pragma mark 每组多少行

    - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{

        NSArray *items = self.foods[component];

        return items.count;

    }

    #pragma mark -UIPickerView数据代理

    #pragma mark 对应组对应行的数据

    -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{

        NSArray *items = self.foods[component];

        return items[row];

    }

    -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{

       

        //获取对应组对应行的数据

        NSString *food = self.foods[component][row];

        switch (component) {

            case 0:

                self.fruitLabel.text = food;

                break;

            case 1:

                self.mainFoodLabel.text = food;

                break;

            case 2:

                self.drinkLabel.text = food;

                break;

            default:

                break;

        }

    }

    #pragma mark 随机菜单

    - (IBAction)randomMenu:(id)sender {

      

       

        NSInteger component = self.foods.count;

       

        //生成每一组的随机数据

        for (NSInteger i = 0; i < component; i++) {

            NSArray *items = self.foods[i];

            NSInteger rows = items.count;

           

            //旧行

            NSInteger oldRow = [self.pickerView selectedRowInComponent:i];

           

            //随机新行

            NSInteger newRow = arc4random_uniform((int)rows);

           

            //新行与旧行相同,再随机,直到不两只

            while (newRow == oldRow) {

                newRow = arc4random_uniform((int)rows);

            }

           

            //pickerView没有变

            [self pickerView:nil didSelectRow:newRow inComponent:i];

           

            //改变pickerView的Cell

            [self.pickerView selectRow:newRow inComponent:i animated:YES];

        }

       

    }

    @end

    "【出题】"

    1>生成0.0-0.9的小数  arc4random_uniform(10) * 0.1)

    2>生成0.00-0.99的小数 arc4random_uniform(100) * 0.01)

    用乘效率会高些。

  • 相关阅读:
    C++ 字符串与数字之间的转换
    两种常见的模式匹配算法(代码实现)
    C++ string整行读取带空格的字符串
    JavaEE(一)开发环境搭建(JDK+Eclipse+Tomcat+Mysql+Spring)
    25java模拟容器的实现
    24java的StringBuilder类和StringBuffer类
    23java的String类常用方法
    22java的回调&内部类
    21java的抽象类和接口
    20java的组合&IDEA踩坑合集1
  • 原文地址:https://www.cnblogs.com/Lu2015-10-03/p/5114160.html
Copyright © 2011-2022 走看看