码迷,mamicode.com
首页 > 其他好文 > 详细

UI基础--UIPikcerView实现餐点搭配示例

时间:2015-01-04 11:55:42      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:

需求:
1.显示3列餐点(水果、主菜、饮料)的数据,供选择;
2.选择完餐点后并显示在界面上;
3.提供“随机”按钮,随机选择餐点搭配,让上天决定选择什么餐点;
 效果图:
技术分享
 
实现步骤:
1、搭建界面;
2、实现UIPikcerView的代理方法;
3、响应选择事件;
4、完成显示选择餐点的数据以及随机选择的功能;
 
具体代码:
  1 //
  2 //  ViewController.m
  3 //  12-27-UIPickerView
  4 //
  5 //  Created by xiaomoge on 14/12/27.
  6 //  Copyright (c) 2014年 xiaomoge. All rights reserved.
  7 //
  8 
  9 #import "ViewController.h"
 10 
 11 @interface ViewController ()<UIPickerViewDataSource,UIPickerViewDelegate>
 12 
 13 @property (nonatomic,strong)NSArray *foods;
 14 //水果标签
 15 @property (weak, nonatomic) IBOutlet UILabel *fruitLabel;
 16 //主食标签
 17 @property (weak, nonatomic) IBOutlet UILabel *mainFoodLabel;
 18 //饮料标签
 19 @property (weak, nonatomic) IBOutlet UILabel *drinkLabel;
 20 //随机按钮事件
 21 - (IBAction)randomMenu;
 22 @property (weak, nonatomic) IBOutlet UIPickerView *pickerView;
 23 
 24 @end
 25 
 26 @implementation ViewController
 27 
 28 #pragma mark - 懒加载
 29 -(NSArray *)foods{
 30     if (!_foods) {
 31         NSString *filePath = [[NSBundle mainBundle] pathForResource:@"foods.plist" ofType:nil];
 32         _foods = [NSArray arrayWithContentsOfFile:filePath];
 33     }
 34     return _foods;
 35 }
 36 
 37 - (void)viewDidLoad {
 38     [super viewDidLoad];
 39     
 40     //默认选中数据,第一行数据
 41     NSInteger columns = self.foods.count;
 42     for (int i = 0; i < columns; i++) {
 43         [self pickerView:nil didSelectRow:0 inComponent:i];
 44     }
 45 }
 46 #pragma mark - UIPickerView数据源
 47 //列数
 48 - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
 49     return self.foods.count;
 50 }
 51 //每一列的行数
 52 - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
 53     //获取每一列的数据
 54     NSArray *items = self.foods[component];
 55     //返回每一列的个数
 56     return items.count;
 57 }
 58 #pragma mark - UIPickerView代理
 59 -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
 60     //获取每一列的数据
 61     NSArray *items = self.foods[component];
 62     //返回对应列的行的数据
 63     return items[row];
 64 }
 65 #pragma mark - pickerView的选中方法
 66 -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
 67     //获取数据
 68     NSArray *items = self.foods[component];
 69     NSString *rowStr = items[row];
 70     //更改数据
 71     switch (component) {
 72         case 0://水果
 73             self.fruitLabel.text = rowStr;
 74             break;
 75         case 1://主食
 76             self.mainFoodLabel.text = rowStr;
 77             break;
 78         case 2://饮料
 79             self.drinkLabel.text = rowStr;
 80             break;
 81         default:
 82             break;
 83     }
 84 }
 85 #pragma mark 随机菜单,由天决定我们吃什么
 86 - (IBAction)randomMenu {
 87     //获取每列有多少行
 88     NSInteger columns = self.foods.count;
 89     
 90     for (int i = 0; i < columns; i ++) {
 91         NSArray *items = self.foods[i];
 92         //对应列的行数
 93         NSInteger rowsInColumn = items.count;
 94         //在行范围产生随机数据
 95         NSInteger randomRow =arc4random_uniform((int)rowsInColumn);
 96         // 获取旧的行数
 97         NSInteger oldRow = [self.pickerView selectedRowInComponent:i];
 98         
 99         while (oldRow == randomRow ) {
100             randomRow =arc4random_uniform((int)rowsInColumn);//如果随机出来的数据和旧数据相同,那么继续进行随机
101         }
102         //更改label的数据
103         [self pickerView:nil didSelectRow:randomRow inComponent:i];
104         //更改UIPickerView选中的数据
105         [self.pickerView selectRow:randomRow inComponent:i animated:YES];
106     }
107 }
108 @end

 

注意点:要改变UIPikcerView选中的行,要使用UIPikcerView的一个方法:

1 - (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated; 

 

 

UI基础--UIPikcerView实现餐点搭配示例

标签:

原文地址:http://www.cnblogs.com/xiaomoge/p/4200630.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!