A.需求
1.使用PickerView做出有3列餐点(水果、主菜、饮料)的搭配Demo
2.选择的餐点实时显示在“显示区”
3.提供“随机”按钮,随机选择菜品搭配
 
B.实现步骤
1.拖入一个PickerView
 
2.用控制器配置dataSource和delegate
 // 遵守UIPickerViewDataSource,UIPickerViewDelegate
@interface ViewController () <UIPickerViewDataSource, UIPickerViewDelegate> /** 选择器 */
@property (weak, nonatomic) IBOutlet UIPickerView *pickerView; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib. // 设置dataSource
self.pickerView.dataSource = self;
// 设置delegage
self.pickerView.delegate = self;
}
 
3.实现代理方法
 #pragma mark - 代理方法
/** 列数 */
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return ;
} /** 对应列的行数 */
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
return ;
} /** 对应列和行的显示内容 */
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
return @"内容";
}
 
 
4.引入plist文件,读取数据
 
 /** 加载数据,延迟加载 */
- (NSArray *) foodCategories {
if (nil == _foodCategories) {
_foodCategories = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"foods.plist" ofType:nil]];
} return _foodCategories;
} #pragma mark - dataSource方法
/** 列数 */
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return self.foodCategories.count;
} /** 对应列的行数 */
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
NSArray *foods = self.foodCategories[component];
return foods.count;
} #pragma mark - delegate方法
/** 对应列和行的显示内容 */
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
NSArray *foods = self.foodCategories[component];
return foods[row];
}
 
 
 
5.制作显示区
 
 /** 水果 */
@property (weak, nonatomic) IBOutlet UILabel *fruitLabel;
/** 主菜 */
@property (weak, nonatomic) IBOutlet UILabel *mainLabel;
/** 饮料 */
@property (weak, nonatomic) IBOutlet UILabel *drinkLabel;
 
6.响应选择事件
 /** 响应选择餐点事件 */
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
NSArray *foods = self.foodCategories[component];
NSString *food = foods[row]; switch (component) {
case :
self.fruitLabel.text = food;
break;
case :
self.mainLabel.text = food;
break;
case :
self.drinkLabel.text = food;
break;
default:
break;
}
 
 
7.制作“随机”功能
 /** 随机选择餐点 */
- (IBAction)onRandomClicked {
// 循环所有餐点种类
for (int i=; i<self.foodCategories.count; i++) {
// 之前选择的餐点行数
NSInteger originalRow = [self.pickerView selectedRowInComponent:i]; NSInteger row = originalRow; // 此种类内含有的所有餐点
NSArray *foods = self.foodCategories[i];
// 如果随机的餐点跟上一次的相同,继续随机
while (row == originalRow) {
row = arc4random() % foods.count;
} // 通知pickerView改变选择
[self.pickerView selectRow:row inComponent:i animated:YES]; // 改变显示区
[self pickerView:self.pickerView didSelectRow:row inComponent:i];
}
}
 
 
 
 

[iOS基础控件 - 6.10.1] PickerView 餐点搭配Demo的更多相关文章

  1. [iOS基础控件 - 6.10.2] PickerView 自定义row内容 国家选择Demo

    A.需求 1.自定义一个UIView和xib,包含国家名和国旗显示 2.学习row的重用   B.实现步骤 1.准备plist文件和国旗图片     2.创建模型 // // Flag.h // Co ...

  2. [iOS基础控件 - 6.9.3] QQ好友列表Demo TableView

    A.需求 1.使用plist数据,展示类似QQ好友列表的分组.组内成员显示缩进功能 2.组名使用Header,展示箭头图标.组名.组内人数和上线人数 3.点击组名,伸展.缩回好友组   code so ...

  3. [iOS基础控件 - 6.10.7] UIWindow

    A.UIWindow概念 1.继承UIView,是一种特殊的UIView 2.通常一个APP只有一个UIWindow 3.iOS程序启动后,创建的第一个视图就是UIWindow 4.没有UIWindo ...

  4. [iOS基础控件 - 6.10.5] UIApplication

    A.概念 1.UIApplication对象是应用程序的象征,每个应用都有 2.单例 3.[UIApplication sharedApplication] 获取 4.iOS启动创建的第一个对象 5. ...

  5. [iOS基础控件 - 6.10] Notification 通知机制

    A.定义      iOS程序都有一个NSNotificationCenter的单例对象,用来负责发布不同对象之间的通知      任何对象都能够在NSNotificationCenter发布通知,发 ...

  6. [iOS基础控件 - 6.10.6] UIApplicationDelegate & 程序启动过程

    A.概念 1.移动app非常容易受到其他的系统.软件事件的干扰,如来电.锁屏 2.app受到干扰的时候,UIApplication会通知delegate,来代理处理干扰事件 3.delegate可以处 ...

  7. [iOS基础控件 - 6.10.4] 项目启动原理 项目中的文件

    A.项目中的常见文件 1.单元测试Test   2.Frameworks(xCode6 创建的SingleView Project没有) 依赖框架   3.Products 打包好的文件   4. p ...

  8. [iOS基础控件 - 6.10.3] DatePicker & UIToolBar

    A.需求 1. 学习DatePicker的基本配置 2.使用TextField召唤指定类型的输入键盘View,这里使用DatePicker 3.给输入键盘上方加上一个UIToolBar,实现如关闭键盘 ...

  9. [iOS基础控件 - 5.5] 代理设计模式 (基于”APP列表"练习)

    A.概述      在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能      1.按钮点击后,显示为“已下载”,并且不 ...

随机推荐

  1. uva1349Optimal Bus Route Design

    二分图最小权完美匹配. 一个最小费用流就能跑了,记住检查一下,容量是否跑满,如果没有跑满,就说明没有完美匹配. #include<cstdio> #include<algorithm ...

  2. EasyUi datagrid 单选框选中事件

    Easyui datagrid中的单选框默认是这样定义的 columns: [[ { field: 'CK', title: '', checkbox: true, width: 30 }]]. 平常 ...

  3. bzoj1601: [Usaco2008 Oct]灌水

    经典延伸最小生成树问题... #include<cstdio> #include<cstring> #include<cctype> #include<alg ...

  4. textview设置字体的行距和字间距

    字间距 textView有一个属性android:textScaleX是调节字间距的,它的值是一个float型.查看源代码,默认textView 此属性是使用的是: android.internal. ...

  5. Leap Motion 开发笔记

    Leap Motion 体系架构 Leap Motion支持所有主流操作系统,leap motion在Windows系统下是作为一个服务运行的,在Mac和Linux是后台守护进程.软件通过USB线连接 ...

  6. db2数据库sql报错信息

    sqlcode sqlstate 说明 000 00000 SQL语句成功完成   01xxx SQL语句成功完成,但是有警告 +012 01545 未限定的列名被解释为一个有相互关系的引用 +098 ...

  7. 【大数取模】HDOJ-1134、CODEUP-1086

    1086: 大数取模   题目描述 现给你两个正整数A和B,请你计算A mod B.为了使问题简单,保证B小于100000. 输入 输入包含多组测试数据.每行输入包含两个正整数A和B.A的长度不超过1 ...

  8. 【JS】限制两个或多个单选框最多只能选择一个

    $(function () { /*$("#checkbox1").click(function(){ if($(this).attr("checked") = ...

  9. 增加SharePoint2010修改域密码功能

    转:http://blog.163.com/hr_test/blog/static/16485210720137953131694/ 前提 SharePoint2010的用户基于AD的,因此修改密码是 ...

  10. 【转】错误日志ID8021来源BROWSER导致电脑死机

    现场工控机死机,网上查了篇文章,具体原因还有待分析,下面是图 在这里有必要介绍两个ID号:6006和6005.在事件查看器里ID号为6006的事件表示事件日志服务已停止,如果你没有在当天的事件查看器中 ...