总结如下:
(知识点一)点击command+option+Enter 组合键可以直接调出辅助编辑器
(知识点二)#pragma mark 备注 可以添加标记,方便于查找,如下所示:
1、主要掌握UIPickerView 和UIDatePicker的使用
2、点击command+option+enter 用于调出辅助编辑器
3、#pragma mark 备注 可以方便查找
知识点三:使用UIPickerView与使用UITableView类似。
(一)首先让当前的控制器遵循数据源协议:注意:也可以直接在分类上添加协议。按住command 点进数据源协议有两个必须实现的方法如下:
// returns the number of 'columns' to display.
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;
// returns the # of rows in each component..
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;
其中第一个数据源方法:设置UIPickerView的列数并返回。
第二个数据源方法:根据列参数component 返回对应列的行数。
(二)其次让当前的控制器遵守UIPickerViewDelegate协议。点进去发现方法有好几个,但是常见的无非以下几个:
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component;
第一个代理协议方法返回NSString类型,主要对指定pickerView指定列component指定行返回指定的内容。
第二个代理协议方法主要用于滑动指定列指定行后的触发事件。
知识点四:
UIPickerView组件有个方法很常用,专门用于获取指定列被选中的行的下标
- (NSInteger)selectedRowInComponent:(NSInteger)component; // returns selected row. -1 if nothing selected
知识点五: 关于随机数的获取
随机数的获取主要使用arc4random_uniform(整型数值);此函数。
获取 零到九的随机数如下:
// 0-9 随机数
arc4random_uniform(10)
// 0.0-0.9
arc4random_uniform(10)*0.1
// 0.00-0.99
arc4random_uniform(100)*0.01
新建工程,详细步骤省略。主要有以下几个步骤:
步骤一:新建一个具有Simple View的工程,打开storyBoard。拖进组件,具体如下:
为需要获取或修改其属性值的组件添加Qulet属性:如下所示:
为显示菜单内容的UILabel组件设置Qulet属性
当我在拖线为UILabel拖属性时托错了控件,后来发现修改起来也很容易,只需要点击拉措的组件右键取消连线。然后发现右侧已经生成的属性原点变成了空心,只需要再点击圆点重新连接到新的组件即可。
步骤二:利用AutoResizing进行屏幕适配,具体如下:
关闭自动布局后,点击列表中的相应控件进行调整。
将所有内容从plist文件读取,plist文件如下所示:
具体代码如下所示:
<span style="font-size:18px;">// // ViewController.m // 点菜系统________ // // Created by apple on 15/10/3. // Copyright (c) 2015年 LiuXun. 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; - (IBAction)randomMenu:(UIButton *)sender; @end @implementation ViewController -(NSArray *)foods { //重写数组的get方法实现懒加载 if (_foods==nil) { NSString *filePath = [[NSBundle mainBundle] pathForResource:@"foods.plist" ofType:nil]; _foods = [NSArray arrayWithContentsOfFile:filePath]; } return _foods; } - (void)viewDidLoad { [super viewDidLoad]; // 设置默认选中数据 [self pickerView:nil didSelectRow:0 inComponent:0]; [self pickerView:nil didSelectRow:0 inComponent:1]; [self pickerView:nil didSelectRow:0 inComponent:2]; } #pragma mark UIPickerView数据源 #pragma mark 列数 -(NSInteger) numberOfComponentsInPickerView:(UIPickerView *)pickerView { return self.foods.count; } #pragma mark 每一列的行数 -(NSInteger) pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { // 获取每一列的数据 NSArray *items = self.foods[component]; // 返回每一列数据的个数 return items.count; } #pragma mark UIpickerView 代理 -(NSString *) pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { // 获取每一列的数据 NSArray *items = self.foods[component]; // 返回对应列对应行的数据 return items[row]; } #pragma mark pickerView选中 -(void) pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { NSLog(@"component %ld row %ld",(long)component,(long)row); // 获取数据 NSArray *items = self.foods[component]; NSString *rowStr = items[row]; // 更改数据 switch (component) { case 0: self.fruitLabel.text = rowStr; break; case 1: self.mainFoodLabel.text = rowStr; break; case 2: self.drinkLabel.text = rowStr; break; default: break; } } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } #pragma mark - 随机菜单 - (IBAction)randomMenu:(UIButton *)sender { // 先获取有多少列 NSInteger columns = self.foods.count; for (int i=0; i<columns; i++) { NSArray *items = self.foods[i]; // 1、 获取对应列的行数 NSInteger rowsInColumn = items.count; // 2、在行范围内生成随机数 NSInteger randomRow = arc4random_uniform((int)rowsInColumn); // 3、每列的随机数不能与之前的一样 // 获取旧的行数 NSInteger oldRow = [self.pickerView selectedRowInComponent:i]; while (oldRow == randomRow) { randomRow = arc4random_uniform((int)rowsInColumn); } // 0.0~0.9 // arc4random_uniform(10)*0.1 // 0.00~0.99 // arc4random_uniform(100)*0.01 // 3 更改数据 // 3.1 更改Label数据 [self pickerView:nil didSelectRow:randomRow inComponent:i]; #warning 要更改pickerView选中的行,要使用pickerView的一个方法 // 3.2更改UIPickerView选中的数据 [self.pickerView selectRow:randomRow inComponent:i animated:YES]; } } @end </span>运行结果如下: