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

需求:

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; 
时间: 2024-08-29 20:43:17

UI基础--UIPikcerView实现餐点搭配示例的相关文章

UI基础--UIPikcerView实现省市联动示例

需求: 1.显示2列数据,一列数据为省级城市,另外一列为省级对应下的地市级城市,并可供选择: 2.选择省级城市时,对应的列显示为其省下的地市级城市,并可选择: 3.重新选择省级城市时,对应的地市级城市显示为其省会城市(如地市级城市不在索引为0处): 实现步骤: 1.搭建界面: 2.实现UIPikcerView的代理方法: 3.响应选择事件: 4.完成显示选择数据: 具体代码: Model: 1 // 2 // JWProvince.h 3 // 12-27-Province 4 // 5 //

ios开发-UI基础-超级猜图

[注意]转载时请注明出处博客园-吃唐僧肉的小悟空http://www.cnblogs.com/hukezhu/ 本篇文章介绍一个比较综合的小应用----超级猜图. 功能分析: 根据显示的图片,在下面的待选项按钮中选中正确答案按钮,选中的按钮会显示在正确答案按钮中 答案错误,答案颜色变为红色,分数减小 答案正确,答案颜色变为蓝色,两秒自动跳入下一题,分数增加 点击"下一题"可以进入下一个题目 点击"大图",可以放大显示图片,再次点击图片或者背景,图片缩小至原来大小 点

iOS开发UI基础—IOS开发中Xcode的一些使用技巧

iOS开发UI基础-IOS开发中Xcode的一些使用技巧 一.快捷键的使用 经常用到的快捷键如下: 新建 shift + cmd + n     新建项目 cmd + n             新建文件 视图 option + cmd + 回车 打开助理编辑器 cmd + 回车           显示主窗口 cmd + 0             导航窗口 option + cmd + 0    工具窗口 在.m & .h之间切换           control + cmd + 上/下

ios开发UI基础—Kvc简单介绍

一.KVC简单介绍 KVC key valued coding 键值编码 KVC通过键值间接编码 补充: 与KVC相对的时KVO,即key valued observer 键值观察.监听某一个模型的属性,只要模型属性的值一变化就通知你. 二.使用KVC 1.KVC基本使用介绍 (1)代码示例: 新建一个命令行项目,用以演示KVC的用法 完成之后为项目添加一个Person类. 为Person类添加两个属性(name和age),注意这两个属性的类型. 1 #import <Foundation/Fo

iOS开发UI基础—xib的简单使用

iOS开发UI基础-xib的简单使用 一.简单介绍 xib和stotyboard的比较,一个轻量级一个重量级. 二.xib的简单使用 1.建立xib文件 建立的xib文件命名为appxib.xib 2.对xib进行设置 根据程序的需要,这里把view调整为自由布局 建立view模型(设置长宽等参数) 调整布局和内部的控件 完成后的单个view 3.使用xib文件的代码示例 YYViewController.m文件代码如下: 1 // 2 // YYViewController.m 3 // 10

iOS开发UI基础—简单的浏览器查看程序

iOS开发UI基础-简单的浏览器查看程序 一.程序实现要求 1.要求 2. 界面分析 (1) 需要读取或修改属性的控件需要设置属性 序号标签 图片 图片描述 左边按钮 右边按钮 (2) 需要监听响应事件的对象,需要添加监听方法 左边按钮 右边按钮 二.实现基本功能的程序 1 // 2 // YYViewController.m 3 // 03-图片浏览器初步 4 // 5 // Created by apple on 14-5-21. 6 // Copyright (c) 2014年 itcas

iOS开发UI基础—transframe属性(形变)

iOS开发UI基础-transframe属性(形变) 1. transform属性 在OC中,通过transform属性可以修改对象的平移.缩放比例和旋转角度 常用的创建transform结构体方法分两大类 (1) 创建"基于控件初始位置"的形变 CGAffineTransformMakeTranslation(平移) CGAffineTransformMakeScale(缩放) CGAffineTransformMakeRotation(旋转) (2) 创建"基于trans

iOS开发UI基础—懒加载

iOS开发UI基础-懒加载 1.懒加载基本 懒加载--也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了,如果没有那么再去进行实例化 2.使用懒加载的好处: (1)不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强 (2)每个控件的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合 3.代码示例 1 // 2 // YYViewController.m

OS开发UI基础—手写控件,frame,center和bounds属性

OS开发UI基础—手写控件,frame,center和bounds属性 一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4)如果是button等控件,还需考虑控件的单击事件等 (5)注意:View Contollor和view的关系 2.注意点 在OC开发中,Storyboard中的所有操作都可以通过代码实现,程序员一定要熟练掌握代码布局界面的能力! 设置控件监听方法的示例代码如下: [btn addTarget:sel