UIPickerView组件的使用之随机点菜系统(一)——利用AutoResizing进行屏幕适配,拖线进行实现

总结如下:

(知识点一)点击command+option+Enter 组合键可以直接调出辅助编辑器

(知识点二)#pragma mark  备注     可以添加标记,方便于查找,如下所示:


1、主要掌握UIPickerView 和UIDatePicker的使用
2、点击command+option+enter 用于调出辅助编辑器
3、#pragma mark 备注  可以方便查找
 
知识点三:使用UIPickerView与使用UITableView类似。
(一)首先让当前的控制器遵循数据源协议:注意:也可以直接在分类上添加协议。按住command 点进数据源协议有两个必须实现的方法如下:
// returns the number of 'columns' to display.
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;

// returns the # of rows in each component..
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;
其中第一个数据源方法:设置UIPickerView的列数并返回。
第二个数据源方法:根据列参数component 返回对应列的行数。

(二)其次让当前的控制器遵守UIPickerViewDelegate协议。点进去发现方法有好几个,但是常见的无非以下几个:
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component;
第一个代理协议方法返回NSString类型,主要对指定pickerView指定列component指定行返回指定的内容。
第二个代理协议方法主要用于滑动指定列指定行后的触发事件。

知识点四:
UIPickerView组件有个方法很常用,专门用于获取指定列被选中的行的下标
- (NSInteger)selectedRowInComponent:(NSInteger)component;    // returns selected row. -1 if nothing selected
知识点五: 关于随机数的获取
随机数的获取主要使用arc4random_uniform(整型数值);此函数。
获取 零到九的随机数如下:
// 0-9 随机数
arc4random_uniform(10)
// 0.0-0.9
arc4random_uniform(10)*0.1
// 0.00-0.99
arc4random_uniform(100)*0.01

新建工程,详细步骤省略。主要有以下几个步骤:

步骤一:新建一个具有Simple View的工程,打开storyBoard。拖进组件,具体如下:

委屈

为需要获取或修改其属性值的组件添加Qulet属性:如下所示:


为显示菜单内容的UILabel组件设置Qulet属性



当我在拖线为UILabel拖属性时托错了控件,后来发现修改起来也很容易,只需要点击拉措的组件右键取消连线。然后发现右侧已经生成的属性原点变成了空心,只需要再点击圆点重新连接到新的组件即可。

步骤二:利用AutoResizing进行屏幕适配,具体如下:


关闭自动布局后,点击列表中的相应控件进行调整。


 将所有内容从plist文件读取,plist文件如下所示:


具体代码如下所示:

<span style="font-size:18px;">//
//  ViewController.m
//  点菜系统________
//
//  Created by apple on 15/10/3.
//  Copyright (c) 2015年 LiuXun. 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;
- (IBAction)randomMenu:(UIButton *)sender;

@end

@implementation ViewController

-(NSArray *)foods
{    //重写数组的get方法实现懒加载
    if (_foods==nil) {
        NSString *filePath = [[NSBundle mainBundle] pathForResource:@"foods.plist" ofType:nil];
        _foods = [NSArray arrayWithContentsOfFile:filePath];
    }
    return _foods;
}
- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 设置默认选中数据
    [self pickerView:nil didSelectRow:0 inComponent:0];
    [self pickerView:nil didSelectRow:0 inComponent:1];
    [self pickerView:nil didSelectRow:0 inComponent:2];
}

#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 代理
-(NSString *) pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    // 获取每一列的数据
    NSArray *items = self.foods[component];
    
    // 返回对应列对应行的数据
    return items[row];
}

#pragma mark pickerView选中
-(void) pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    NSLog(@"component %ld row %ld",(long)component,(long)row);
    
    // 获取数据
    NSArray *items = self.foods[component];
    NSString *rowStr = items[row];
    
    // 更改数据
    switch (component) {
        case 0:
            self.fruitLabel.text = rowStr;
            break;
        case 1:
            self.mainFoodLabel.text = rowStr;
            break;
        case 2:
            self.drinkLabel.text = rowStr;
            break;
        default:
            break;
    }
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - 随机菜单
- (IBAction)randomMenu:(UIButton *)sender {
    // 先获取有多少列
    NSInteger columns = self.foods.count;
    
    for (int i=0; i<columns; i++) {
        NSArray *items = self.foods[i];
        
        // 1、 获取对应列的行数
        NSInteger rowsInColumn = items.count;
        
        // 2、在行范围内生成随机数
        NSInteger randomRow = arc4random_uniform((int)rowsInColumn);
        
        // 3、每列的随机数不能与之前的一样
        // 获取旧的行数
        NSInteger oldRow = [self.pickerView selectedRowInComponent:i];
        
        while (oldRow == randomRow) {
            randomRow = arc4random_uniform((int)rowsInColumn);
        }
        // 0.0~0.9
        // arc4random_uniform(10)*0.1
        
        // 0.00~0.99
        // arc4random_uniform(100)*0.01
        
        // 3 更改数据
        // 3.1 更改Label数据
        [self pickerView:nil didSelectRow:randomRow inComponent:i];
        
#warning 要更改pickerView选中的行,要使用pickerView的一个方法
        // 3.2更改UIPickerView选中的数据
        [self.pickerView selectRow:randomRow inComponent:i animated:YES];
    }
    
}
@end
</span>
运行结果如下:



你可能感兴趣的:(UIPickerView组件的使用之随机点菜系统(一)——利用AutoResizing进行屏幕适配,拖线进行实现)