01、UIPickerView-案例3

国旗选择案例
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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值