UIPickerView组件的使用之国旗联动——使用XIB自定义组件

具体步骤如下:

1


2


3


4


5


6


7


8


9


10


11


资源文件内的PLIST截图如下:


新建工程,代码如下:

Model类Flag如下:

Flag.h

//
//  Flag.h
//  02.国旗联动
//
//  Created by 刘刘勋 on 16/1/2.
//  Copyright © 2016年 aaaaa. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Flag : NSObject

@property(nonatomic, copy)NSString *name;
@property(nonatomic, copy)NSString *icon;

-(instancetype)initWithDic:(NSDictionary *)dic;
+(instancetype)initWithDic:(NSDictionary *)dic;

+(NSArray *)flagList;
@end
Flag.m

//
//  Flag.m
//  02.国旗联动
//
//  Created by 刘刘勋 on 16/1/2.
//  Copyright © 2016年 aaaaa. All rights reserved.
//

#import "Flag.h"

@implementation Flag

-(instancetype)initWithDic:(NSDictionary *)dic{
    if (self = [super init]) {
        [self setValuesForKeysWithDictionary:dic];
    }
    return self;
}

+(instancetype)initWithDic:(NSDictionary *)dic{
    return [[self alloc] initWithDic:dic];
}

+(NSArray *)flagList{
  //加载plist文件
    NSString *path = [[NSBundle mainBundle] pathForResource:@"flags" ofType:@"plist"];
    NSArray *dicArray = [NSArray arrayWithContentsOfFile:path];
    
    //字典转模型
    NSMutableArray *tmpArray = [NSMutableArray array];
    for (NSDictionary *dic  in dicArray) {
        Flag *flag = [Flag initWithDic:dic];
        [tmpArray addObject:flag];
    }
    return tmpArray;
}

@end

控制器viewController.m

//
//  ViewController.m
//  02.国旗联动
//
//  Created by 刘刘勋 on 16/1/2.
//  Copyright © 2016年 aaaaa. All rights reserved.
//

#import "ViewController.h"
#import "Flag.h"
#import "FlagView.h"

@interface ViewController ()<UIPickerViewDelegate,UIPickerViewDataSource>
@property(nonatomic, strong)NSArray *flags;

@end

@implementation ViewController

-(NSArray *)flags{
    if (!_flags) {
        _flags = [Flag flagList];
    }
    return _flags;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

#pragma mark- 返回pickerview的列数
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return 1;
}

#pragma mark - 指明pickerView的每一列的行数
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
    return self.flags.count;
}

#pragma mark -自定义pickerView的行
-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{
    
    //
    //    UILabel *label = [[UILabel alloc] init];
    //    label.backgroundColor = [UIColor yellowColor];
    //    label.text = @"XX";
    
    // 注意:在此处我们可以不用设置返回组件的frame,系统会自动帮我们进行设置
    /*
     但是自定义组件要添加bounds
     设置高度无效,需要在自定义代理方法中进行设置F
     reusingView:如果有重用的View,会传一个View进来
     */
    FlagView *flagView = (FlagView *)view;
    if (!flagView) {
        flagView = [FlagView flagView];
        flagView.bounds = CGRectMake(0, 0, 200, 0);
    }
    
    // 设置数据
    // 获取模型
    Flag *flag = self.flags[row];
    flagView.flag = flag;

    NSLog(@"row: %ld address: %p name: %@",row, flagView,flag.name);
    return flagView;
    
}

#pragma mark- 返回组件的高度

-(CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{
    return 50;
}
@end



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值