[iOS基础控件 - 6.10.1] PickerView 餐点搭配Demo

A.需求

1.使用PickerView做出有3列餐点(水果、主菜、饮料)的搭配Demo

2.选择的餐点实时显示在“显示区”

3.提供“随机”按钮,随机选择菜品搭配

B.实现步骤

1.拖入一个PickerView

2.用控制器配置dataSource和delegate

 1 // 遵守UIPickerViewDataSource,UIPickerViewDelegate
 2 @interface ViewController () <UIPickerViewDataSource, UIPickerViewDelegate>
 3
 4 /** 选择器 */
 5 @property (weak, nonatomic) IBOutlet UIPickerView *pickerView;
 6
 7 @end
 8
 9 @implementation ViewController
10
11 - (void)viewDidLoad {
12     [super viewDidLoad];
13     // Do any additional setup after loading the view, typically from a nib.
14
15     // 设置dataSource
16     self.pickerView.dataSource = self;
17     // 设置delegage
18     self.pickerView.delegate = self;
19 }

3.实现代理方法

 1 #pragma mark - 代理方法
 2 /** 列数 */
 3 - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
 4     return 3;
 5 }
 6
 7 /** 对应列的行数 */
 8 - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
 9     return 5;
10 }
11
12 /** 对应列和行的显示内容 */
13 - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
14     return @"内容";
15 }

4.引入plist文件,读取数据

 1 /** 加载数据,延迟加载 */
 2 - (NSArray *) foodCategories {
 3     if (nil == _foodCategories) {
 4         _foodCategories = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"foods.plist" ofType:nil]];
 5     }
 6
 7     return _foodCategories;
 8 }
 9
10 #pragma mark - dataSource方法
11 /** 列数 */
12 - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
13     return self.foodCategories.count;
14 }
15
16 /** 对应列的行数 */
17 - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
18     NSArray *foods = self.foodCategories[component];
19     return foods.count;
20 }
21
22
23 #pragma mark - delegate方法
24 /** 对应列和行的显示内容 */
25 - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
26     NSArray *foods = self.foodCategories[component];
27     return foods[row];
28 }

5.制作显示区

1 /** 水果 */
2 @property (weak, nonatomic) IBOutlet UILabel *fruitLabel;
3 /** 主菜 */
4 @property (weak, nonatomic) IBOutlet UILabel *mainLabel;
5 /** 饮料 */
6 @property (weak, nonatomic) IBOutlet UILabel *drinkLabel;

6.响应选择事件

 1 /** 响应选择餐点事件 */
 2 - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
 3     NSArray *foods = self.foodCategories[component];
 4     NSString *food = foods[row];
 5
 6     switch (component) {
 7         case 0:
 8             self.fruitLabel.text = food;
 9             break;
10         case 1:
11             self.mainLabel.text = food;
12             break;
13         case 2:
14             self.drinkLabel.text = food;
15             break;
16         default:
17             break;
18     }

7.制作“随机”功能

 1 /** 随机选择餐点 */
 2 - (IBAction)onRandomClicked {
 3     // 循环所有餐点种类
 4     for (int i=0; i<self.foodCategories.count; i++) {
 5         // 之前选择的餐点行数
 6         NSInteger originalRow = [self.pickerView selectedRowInComponent:i];
 7
 8         NSInteger row = originalRow;
 9
10         // 此种类内含有的所有餐点
11         NSArray *foods = self.foodCategories[i];
12         // 如果随机的餐点跟上一次的相同,继续随机
13         while (row == originalRow) {
14             row = arc4random() % foods.count;
15         }
16
17         // 通知pickerView改变选择
18         [self.pickerView selectRow:row inComponent:i animated:YES];
19
20         // 改变显示区
21         [self pickerView:self.pickerView didSelectRow:row inComponent:i];
22     }
23 }

时间: 2024-12-20 06:54:14

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

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

A.需求 1.自定义一个UIView和xib,包含国家名和国旗显示 2.学习row的重用 B.实现步骤 1.准备plist文件和国旗图片 2.创建模型 1 // 2 // Flag.h 3 // CountriesSelection 4 // 5 // Created by hellovoidworld on 14/12/16. 6 // Copyright (c) 2014年 hellovoidworld. All rights reserved. 7 // 8 9 #import <Foun

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

A.需求 1.使用plist数据,展示类似QQ好友列表的分组.组内成员显示缩进功能 2.组名使用Header,展示箭头图标.组名.组内人数和上线人数 3.点击组名,伸展.缩回好友组 B.实现步骤 1.编写MVC结构 (1)根据plist文件结构,编写model,使用嵌套型 1 // 2 // FriendGroup.h 3 // FriendsList 4 // 5 // Created by hellovoidworld on 14/12/12. 6 // Copyright (c) 2014

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

A.定义 iOS程序都有一个NSNotificationCenter的单例对象,用来负责发布不同对象之间的通知 任何对象都能够在NSNotificationCenter发布通知,发布自己的发生的事件:监听者(Observer)可以选择接受某个特定通知.   B.使用 1. 属性      - (NSString*)name; // 通知的名称      - (id)object; // 通知发布者(是谁要发布通知) - (NSDictionary*)userInfo; // 一些额外的信息(通知

[iOS基础控件 - 6.10.6] UIApplicationDelegate

A.概念 1.移动app非常容易受到其他的系统.软件事件的干扰,如来电.锁屏 2.app受到干扰的时候,UIApplication会通知delegate,来代理处理干扰事件 3.delegate可以处理的事件 (1)app声明周期(启动.关闭) (2)系统事件(来电) (3)紧急事件(内存警告) B.使用 称为delegate的条件:遵守UIApplicationDelegate协议 项目开始会自动创建:AppDelegate 1.delegate方法 1 - (BOOL)application

[iOS基础控件 - 6.10.7] UIWindow &amp; 程序启动过程

A.UIWindow概念 1.继承UIView,是一种特殊的UIView 2.通常一个APP只有一个UIWindow 3.iOS程序启动后,创建的第一个视图就是UIWindow 4.没有UIWindow,不能显示任何东西 B.使用 1.创建一个Empty Application项目 没有了storyboard,要手动实现UIWindow的创建代码(其实这就是storyboard做的事情) 1 // 手动创建UIWindow,并加到screen上 2 self.window = [[UIWindo

[iOS基础控件 - 6.10.3] DatePicker &amp; UIToolBar

A.需求 1. 学习DatePicker的基本配置 2.使用TextField召唤指定类型的输入键盘View,这里使用DatePicker 3.给输入键盘上方加上一个UIToolBar,实现如关闭键盘等功能 B.DatePicker使用 1.DatePicker的主要属性 Mode:显示的内容,可以选择日期.时间的自由组合 Locale:显示的语言样式 Interval:每个选项的时间间隔 Date:当前选择的时间 Constraint:指定最小和最大时间 Timer:计时器 2.使用代码创建D

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

A.项目中的常见文件 1.单元测试Test 2.Frameworks(xCode6 创建的SingleView Project没有) 依赖框架 3.Products 打包好的文件 4. projectname-Info.plist 全局配置文件 所以最好其他的plist文件不要带有Info字眼 (1)更改项目名 a.修改Bundle display name b.clean c.模拟器删除app,重新生成 (2)Bundle Identifier App唯一标识符 (3)stroyboard入口

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

A.概述 在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能 1.按钮点击后,显示为“已下载”,并且不可以再按 2.在屏幕中间弹出一个消息框,通知消息“xx已经被安装”,慢慢消失 3.消息框样式为圆角半透明 B.不使用代理模式,使用app空间组和主View之间的父子View关系 1.在主View中创建一个消息框 主View控制器:ViewController.m 1 // 创建下载成功消息框 2 CGFloat labelWid

iOS基础控件UINavigationController中的传值

iOS基础控件UINavigationController中的传值,代理传值,正向传值,反向传值 #import <UIKit/UIKit.h> //声明一个协议 @protocol SendValue<NSObject> //定义一个方法 - (void)sendBtnTitle:(NSString *)title; @end @interface FirstViewController : UIViewController // 定义代理 @property (nonatomi