具体步骤如下:
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