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. SFMPQ打包工具完后小结

    硬盘上没有,第一次创建Archive的时候用SFileOpenArchiveForUpdate, 当打开一个已经存在archive的时候用SFileOpenArchive. MpqDeleteFile ...

  2. tomcat部署两个相同的项目报错不能访问

    需要在同一个tomcat上搭建一个项目的两个版本,都要能跑起来   直接复制两个项目部署,会出现两个错误: 1,webAppKey 冲突 2,tomcat启动会有内存溢出(OutOfMemoryErr ...

  3. 永久的CheckBox(单选,全选/反选)!

    <html> <head> <title>选择</title> <script type="text/javascript" ...

  4. MySQL操作备忘录

    在mysql包中,mysqld是数据库服务器,mysql是客户端,mysqladmin则用于管理数据库服务器的信息,如用户密码等. 关于安装: 1.在d:/sftwr/mysql/bin目录下: my ...

  5. 数据库语言(三):MySQL、PostgreSQL、JDBC

    MySQL MySQL资料很多,这里只给出一个在论坛博客中最常用的操作:分页 mysql> select pname from product limit 10,20; limit的第一个参数是 ...

  6. ubuntun安装ssh,并远程链接服务器操作

    SSH是一种以安全.加密方式连接远程主机或服务器的方法.SSH服务器接受从有SSH的客户机的连接,允许操作者象在本地一样地登录系统.你可以用SSH从远程运行shell和X程序. (1)安装SSH服务器 ...

  7. 【经典DFS】NYOJ-1058-部分和问题

    [题目链接:NYOJ-1058] 看到题目难度是2,所以想也没想,直接循环比较...结果果然... 是错的. #include<cstdio> #include<cstring> ...

  8. iOS - 操作文件目录的方法

    转:http://blog.csdn.net/marujunyy/article/details/11579183 使用目录的常用方法: //获取当前目录 - (NSString *)currentD ...

  9. Oracle数据库中的违规策略规则的修正

    如笔者计算机上违规的策略与规则: 为了安全,可如下方式对齐进行修正:

  10. java web 学习十五(jsp基础语法)

    任何语言都有自己的语法,JAVA中有,JSP虽然是在JAVA上的一种应用,但是依然有其自己扩充的语法,而且在JSP中,所有的JAVA语句都可以使用. 一.JSP模版元素 JSP页面中的HTML内容称之 ...