国旗选择案例
1、创建模型
-(instancetype)initWithDict: (NSDictionary *) dict{
if(self=[super init]){
[self setValuesForKeysWithDictionary:dict];
}
return self;
}
+(instancetype) flagWithDict: (NSDictionary *) dict{
return [[self alloc] initWithDict:dict];
}
2、搭建界面和拖拽连线数据源和代理到控制器
3、懒加载数据
-(NSArray *)flags{
if(_flags==nil){
NSString *path=[[NSBundle mainBundle] pathForResource:@"flags.plist" ofType:nil];
NSArray *dictArray=[NSArray arrayWithContentsOfFile:path];
NSMutableArray *mArray=[NSMutableArray arrayWithCapacity:dictArray.count];
for(NSDictionary *dict in dictArray){
[mArray addObject:[Flag flagWithDict:dict]];
}
_flags=mArray;
}
return _flags;
}
4、实现数据源方法
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
return 1;
}
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
return self.flags.count;
}
5、实现代理方法
-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{
//创建UIView
FlagItemView *flagItemView=[FlagItemView flagItemView];
//设置模型
flagItemView.flag=self.flags[row];
return flagItemView;
}
6、设定每行的高度
-(CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{
return 100;
}
7、通过xib创建UIView
头文件
@class Flag;
@interface FlagItemView : UIView
//绑定一个模型
@property (nonatomic,strong) Flag *flag;
+(instancetype) flagItemView;
@end
实现文件
@interface FlagItemView()
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
@property (weak, nonatomic) IBOutlet UIImageView *icon;
@end
@implementation FlagItemView
//重写set方法设置数据,注意第一步都要赋值如_flag=flag;
-(void)setFlag:(Flag *)flag{
_flag=flag;
self.nameLabel.text=flag.name;
self.icon.image=[UIImage imageNamed:flag.icon];
}
//通过xib创建UIView
+(instancetype) flagItemView{
return [[[NSBundle mainBundle] loadNibNamed:@"FlagItemView" owner:nil options:nil] firstObject];
}
@end