UI进阶-第01天
/**
摘要:
掌握UIPicderView的使用
掌握键盘工具条的使用
*/
一、UIPikcerView的使用
》打开官方文档 查看DatePicker/UIPikcerView在iOS6与iOS7的区别
查找至UserExperience— Guides — iOS 7 UI Transition Guide — Controls - Picker
"【案例:点菜系统】"
//放个点菜系统的截图
》使用UIPikcerView控件实现点菜系统
》掌握UIPikcerView的代理与数据源与代理方法的使用,与TableView类比
(1)UITableView的每一行Cell是在数据源里,而UIPikcerView的每一行View是在代理里
(2)UIPickerView每一行长什么样有两个方法
//-(NSString*)pickerView: titleForRow: forComponent:直接返回一个字符串
//-(UIView*)pickerView: viewForRow: forComponent: reusingView:直接返回一个view
》掌握使用代理的【-(NSString *)pickerView:titleForRow:forComponent:】方法显示一组数据与显示多组数据
》加载foods.plist文件,显示多组数据
》监听每组选中的行,更改Label数据
(1)使用代理方法【-(void)pickerView:didSelectRow:inComponent:】
》实现默认选中每一组的第一行数据
(1)在viewDidLoad方法调用【-(void)pickerView:didSelectRow:inComponent:】实现
》实现随机选菜单
(1)实现Label数据的随机变更
(2)实现pickerView的数据随机变更
(3)每一组对应行的数据一定要不同上一次的行数据
/**
*获取旧行与新行,使用while循环,
//旧行
NSInteger oldRow = [self.pickerViewselectedRowInComponent:i];
//随机新行
NSInteger newRow =arc4random_uniform((int)rows);
//新行与旧行相同,再随机,直到不两只
while (newRow == oldRow) {
newRow = arc4random_uniform((int)rows);
}
*/
UI进阶-第01天
/**
摘要:
掌握UIPicderView的使用
掌握键盘工具条的使用
*/
一、UIPikcerView的使用
》打开官方文档 查看DatePicker/UIPikcerView在iOS6与iOS7的区别
查找至UserExperience— Guides — iOS 7 UI Transition Guide — Controls - Picker
"【案例:点菜系统】"
//放个点菜系统的截图
》使用UIPikcerView控件实现点菜系统
》掌握UIPikcerView的代理与数据源与代理方法的使用,与TableView类比
(1)UITableView的每一行Cell是在数据源里,而UIPikcerView的每一行View是在代理里
(2)UIPickerView每一行长什么样有两个方法
//-(NSString*)pickerView: titleForRow: forComponent:直接返回一个字符串
//-(UIView*)pickerView: viewForRow: forComponent: reusingView:直接返回一个view
》掌握使用代理的【-(NSString *)pickerView:titleForRow:forComponent:】方法显示一组数据与显示多组数据
》加载foods.plist文件,显示多组数据
》监听每组选中的行,更改Label数据
(1)使用代理方法【-(void)pickerView:didSelectRow:inComponent:】
》实现默认选中每一组的第一行数据
(1)在viewDidLoad方法调用【-(void)pickerView:didSelectRow:inComponent:】实现
》实现随机选菜单
(1)实现Label数据的随机变更
(2)实现pickerView的数据随机变更
(3)每一组对应行的数据一定要不同上一次的行数据
/**
*获取旧行与新行,使用while循环,
//旧行
NSInteger oldRow = [self.pickerViewselectedRowInComponent:i];
//随机新行
NSInteger newRow =arc4random_uniform((int)rows);
//新行与旧行相同,再随机,直到不两只
while (newRow == oldRow) {
newRow = arc4random_uniform((int)rows);
}
*/
ViewController.m
// 01.点菜系统
//
// Created by Yong Feng Guo on 14-12-16.
// Copyright (c) 2014年 Fung. All rights reserved.
//
#import"ViewController.h"
@interface ViewController()<UIPickerViewDataSource,UIPickerViewDelegate>
@property(nonatomic,strong)NSArray *foods;
@property (weak,nonatomic) IBOutlet UILabel *fruitLabel;
@property (weak,nonatomic) IBOutlet UILabel *mainFoodLabel;
@property (weak,nonatomic) IBOutlet UILabel *drinkLabel;
@property (weak,nonatomic) IBOutlet UIPickerView *pickerView;
@end
@implementation ViewController
/**
*懒加载食物数据
*/
-(NSArray*)foods{
if(!_foods) {
NSString *foodsPath = [[NSBundlemainBundle] pathForResource:@"foods.plist" ofType:nil];
_foods = [NSArrayarrayWithContentsOfFile:foodsPath];
}
return _foods;
}
- (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view, typicallyfrom a nib.
//默认显示每一组的第一行数据
NSInteger components = self.foods.count;
for(NSInteger i = 0; i<components; i++) {
[self pickerView:nil didSelectRow:0 inComponent:i];
}
}
#pragmamark -UIPickerView数据原
#pragmamark 多少组
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
return self.foods.count;
}
#pragmamark 每组多少行
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
NSArray *items = self.foods[component];
return items.count;
}
#pragmamark -UIPickerView数据代理
#pragmamark 对应组对应行的数据
-(NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
NSArray *items = self.foods[component];
return items[row];
}
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)rowinComponent:(NSInteger)component{
//获取对应组对应行的数据
NSString *food = self.foods[component][row];
switch (component) {
case 0:
self.fruitLabel.text = food;
break;
case 1:
self.mainFoodLabel.text = food;
break;
case 2:
self.drinkLabel.text = food;
break;
default:
break;
}
}
#pragmamark 随机菜单
- (IBAction)randomMenu:(id)sender {
NSInteger component = self.foods.count;
//生成每一组的随机数据
for(NSInteger i = 0; i < component; i++) {
NSArray *items = self.foods[i];
NSInteger rows = items.count;
//旧行
NSInteger oldRow = [self.pickerView selectedRowInComponent:i];
//随机新行
NSInteger newRow = arc4random_uniform((int)rows);
//新行与旧行相同,再随机,直到不两只
while (newRow == oldRow) {
newRow = arc4random_uniform((int)rows);
}
//pickerView没有变
[self pickerView:nildidSelectRow:newRow inComponent:i];
//改变pickerView的Cell
[self.pickerView selectRow:newRow inComponent:i animated:YES];
}
}
@end
"【出题】"
1>生成0.0-0.9的小数 arc4random_uniform(10) *0.1)
2>生成0.00-0.99的小数 arc4random_uniform(100) *0.01)
用乘效率会高些。
"【案例:国旗选择】"
//此处插入国旗选择的图片
》加载flags.plist数据到 "国旗模型[Flag.h]"
》掌握代理【-(UIView*)pickerView:viewForRow:forComponent:reusingView:】的使用
(1)在数据源里返回一组数据,行数由国旗个数决定
(2)在代理方法中使用上面的方法,每一行返回一个View,返回的这个view为label
(3)打印reusingView的地址和文字,"查看循环利用的view" --'备课的时候多演示几次'
//eg:NSLog(@"==%p %@",label,label.text);
(4)使用一个xib描述国家和国旗
(5)掌握一个设置行高的代理方法
"【案例:省市联动】"
》添加Province模型加载plist文件
》实现PickerView的数据源和代理
(1)返回两组数据
(2)实现PickerView的代理,使用【-(UIView*)pickerView:viewForRow:forComponent:reusingView:】方法,返回一个Label
(3)添加一个当前省份选中索引IndexOfProv
(4)默认城市那一组数据 返回 第一个省份的城市数据
(5)当前省份选中的索引改变时,刷新城市数据并默认选中的第一个城市
*[pickerViewreloadComponent:1];
*[pickerViewselectRow:0 inComponent:1 animated:YES];
》掌握设置组宽的代理方法
(1)实现【-(CGFloat)pickerView:widthForComponent:】方法设置组的宽度
(2)设置两列View的背景颜色不同看出宽度的区别
二、DatePicker的使用
"【案例: DatePicker&键盘处理】"
》掌握DatePicker本地化的设置
(1)storyboard设置本地化
(2)获取系统可以的本地化[NSLocale availableLocaleIdentifiers]
(3)代码设置日期的本地化
》掌握DataPikcer的日期格式设置
(1)storybard设置日期格式
(2)代码设置日期格式 datePickerMode属性
》掌握UITextField如果弹出日期选择器并在键盘添加工具条
(1)设置UITextField的inputView属性为日期选择器即可
(2)熟悉UIToolbar的使用,添加UIBarButtonItem
(3)自定义一个键盘工具条,添加在键盘上,设置UITextField的inputAccessoryView属性
(4)通过代理监听键盘工具条的几个按钮
》熟悉代码实现UIToolBar
"注:
"1.创建ToolBar要设置frm
"2.添加固定弹簧时,一定要设置宽度
ViewController.m
// 01.点菜系统
//
// Created by Yong Feng Guo on 14-12-16.
// Copyright (c) 2014年 Fung. All rights reserved.
//
#import"ViewController.h"
@interface ViewController()<UIPickerViewDataSource,UIPickerViewDelegate>
@property(nonatomic,strong)NSArray *foods;
@property (weak,nonatomic) IBOutlet UILabel *fruitLabel;
@property (weak,nonatomic) IBOutlet UILabel *mainFoodLabel;
@property (weak,nonatomic) IBOutlet UILabel *drinkLabel;
@property (weak,nonatomic) IBOutlet UIPickerView *pickerView;
@end
@implementation ViewController
/**
*懒加载食物数据
*/
-(NSArray*)foods{
if(!_foods) {
NSString *foodsPath = [[NSBundlemainBundle] pathForResource:@"foods.plist" ofType:nil];
_foods = [NSArrayarrayWithContentsOfFile:foodsPath];
}
return _foods;
}
- (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view, typicallyfrom a nib.
//默认显示每一组的第一行数据
NSInteger components = self.foods.count;
for(NSInteger i = 0; i<components; i++) {
[self pickerView:nil didSelectRow:0 inComponent:i];
}
}
#pragmamark -UIPickerView数据原
#pragmamark 多少组
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
return self.foods.count;
}
#pragmamark 每组多少行
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
NSArray *items = self.foods[component];
return items.count;
}
#pragmamark -UIPickerView数据代理
#pragmamark 对应组对应行的数据
-(NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
NSArray *items = self.foods[component];
return items[row];
}
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)rowinComponent:(NSInteger)component{
//获取对应组对应行的数据
NSString *food = self.foods[component][row];
switch (component) {
case 0:
self.fruitLabel.text = food;
break;
case 1:
self.mainFoodLabel.text = food;
break;
case 2:
self.drinkLabel.text = food;
break;
default:
break;
}
}
#pragmamark 随机菜单
- (IBAction)randomMenu:(id)sender {
NSInteger component = self.foods.count;
//生成每一组的随机数据
for(NSInteger i = 0; i < component; i++) {
NSArray *items = self.foods[i];
NSInteger rows = items.count;
//旧行
NSInteger oldRow = [self.pickerView selectedRowInComponent:i];
//随机新行
NSInteger newRow = arc4random_uniform((int)rows);
//新行与旧行相同,再随机,直到不两只
while (newRow == oldRow) {
newRow = arc4random_uniform((int)rows);
}
//pickerView没有变
[self pickerView:nildidSelectRow:newRow inComponent:i];
//改变pickerView的Cell
[self.pickerView selectRow:newRow inComponent:i animated:YES];
}
}
@end
"【出题】"
1>生成0.0-0.9的小数 arc4random_uniform(10) *0.1)
2>生成0.00-0.99的小数 arc4random_uniform(100) *0.01)
用乘效率会高些。