Picker估计大家都不陌生了。经常会用到。今天来做一个比较简单的介绍吧。
1.最简单的Picker:只有一个Picker,根据数据源显示内容,并捕捉到选择的项目。
2.相关的Picker:两个Picker,都有数据源,但是第二个Picker的数据源会根据第一个不同选择而变化,最后捕捉到两个Picker的选项。
废话不多说了。开始。
1.新建Picker工程,模板为Empty Application。
2.根据我之前的博文建立一个标签栏的多视图界面。
两个视图分别为SinglePicker和DoublePicker。文件结构如图:
这样方便我们建立两个不同的picker。不会建立的可以参考http://blog.sina.com.cn/s/blog_6bd25bef0100vjyg.html
3.布局
SinglePicker和DoublePicker都一样,如图:
4.编写协议方法:
picker的实现是有自己协议的:<UIPickerViewDelegate,UIPickerViewDataSource>
对于SinglePicker,我们这样写:
对于SinglePicker.h
#import <UIKit/UIKit.h>
@interface SinglePicker : UIViewController<UIPickerViewDelegate,UIPickerViewDataSource>{
}
@property (strong, nonatomic) NSArray *data;//数据源
@property (strong, nonatomic) IBOutlet UIPickerView *picker;
- (IBAction)choose;//捕捉
@end
对于SinglePicker.m:
#import "SinglePicker.h"
@implementation SinglePicker
@synthesize picker;
@synthesize data;
- (IBAction)choose{
}
……
- (void)viewDidLoad
{
}
……
#pragma mark -
#pragma mark Picker Data Soucrce Methods
- (NSInteger)numberOfComponentsInPick
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
}
#pragma mark -
#pragma mark Picker Data Delegate Methods;
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
}
而对于DoublePicker.h
#import <UIKit/UIKit.h>
@interface DoublePicker : UIViewController{
}
@property (strong, nonatomic) IBOutlet UIPickerView *doublePicker;
@property (strong, nonatomic) NSArray *country;
@property (strong, nonatomic) NSArray *city;
@property (strong, nonatomic) NSArray *cities;
- (IBAction)choose;
@end
对DoublePicker.m的边写就相对复杂一点了。可以看一下注释:
#import "DoublePicker.h"
@implementation DoublePicker
@synthesize doublePicker;
@synthesize country;
@synthesize city;
@synthesize cities;
- (IBAction)choose{
}
……
- (void)viewDidLoad
{
}
……
#pragma mark -
#pragma mark Picker Data Source Methods
- (NSInteger)numberOfComponentsInPick
{
}
- (NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component
{
}
#pragma mark Picker Delegate Methods
- (NSString *)pickerView:(UIPickerView *)pickerView
{
}
//注意这里
- (void)pickerView:(UIPickerView*)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
}
这解释一下,同一个Picker中不同列是使用不同的componet来区分的,而不同的行就是用row来区分啦。
5.连接:
SinglePicker和DoublePicker连接方式一样,都是在xib文件里,按住右键,同时拖动Picker到File’s Owner两次把Delegate和data source连上。 按住右键,拖动Button到File’s Owner把choose方法连上。
6.运行:
【原文:http://blog.sina.com.cn/s/blog_6bd25bef0100wt7r.html】