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

来源:互联网 发布:网络新技术专题报告 编辑:程序博客网 时间:2024/04/28 11:44

 具体步骤如下:

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
原创粉丝点击