您的位置:首页 > 产品设计 > UI/UE

IOS第11天(2:UIPickerView自定义国旗选择)

2015-08-19 15:56 609 查看
国旗选择

#import "HMViewController.h"
#import "HMFlag.h"
#import "HMFlagView.h"

@interface HMViewController ()<UIPickerViewDataSource,UIPickerViewDelegate>

@property(nonatomic,strong)NSArray *flags;

@end

@implementation HMViewController

-(NSArray *)flags{
if (_flags == nil) {
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"flags" ofType:@"plist"];
NSArray *flagsArray = [NSArray arrayWithContentsOfFile:filePath];

NSMutableArray *flagsM = [NSMutableArray array];

for (NSDictionary *dict in flagsArray) {
HMFlag *flag = [HMFlag flagWithDict:dict];
[flagsM addObject:flag];
}

_flags = flagsM;

}

return _flags;
}

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

NSLog(@"%@",self.flags);
}

#pragma mark -pickerView的数据源

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{

return 1;
}
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
return self.flags.count;
}

//-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
//    HMFlag *flag =self.flags[row];
//    return flag.name;
//}

#pragma mark 通常用于自定pickerView的cellView
-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{
#warning 在ios7当中,view的可循环引用是用bug。

HMFlag *flag =self.flags[row];
//    UILabel *label = [[UILabel alloc] init];
//    //自定义view的时候,设置x,y无效,所以不要做无用式
//    //label.frame = CGRectMake(10, 10, 200, 44);
//    label.bounds = CGRectMake(0, 0, 200, 44);
//    label.backgroundColor = [UIColor grayColor];
//    label.text = flag.name;
HMFlagView *flagView = nil;

//如果view不为空,代表有可循环使用的view
if (view != nil) {
flagView = (HMFlagView *)view;
}else{
flagView = [HMFlagView flagView];
}

//设置flagview的数据
flagView.flag = flag;

NSLog(@"%d %p",row,flagView);

return flagView;
}

#pragma mark 设置picker里的第每一个view的高度
-(CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{
return 60;
}


*****HMFlagView.m

#import "HMFlagView.h"
#import "HMFlag.h"

@interface HMFlagView()
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
@property (weak, nonatomic) IBOutlet UIImageView *imageView;

@end

@implementation HMFlagView

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}

+(instancetype)flagView{
return  [[[NSBundle mainBundle] loadNibNamed:@"HMFlagView" owner:nil options:nil] lastObject];
}

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
}
*/

-(void)setFlag:(HMFlag *)flag{
_flag = flag;
self.nameLabel.text = flag.name;
self.imageView.image = [UIImage imageNamed:flag.icon];

}

@end


*****HMFlagView.h

#import <UIKit/UIKit.h>
@class HMFlag;
@interface HMFlagView : UIView

+(instancetype)flagView;
@property(nonatomic,strong)HMFlag *flag;

@end


***模型HMFlag.m

#import "HMFlag.h"

@implementation HMFlag

-(instancetype)initWithDict:(NSDictionary *)dict{

if (self = [super init]) {
[self setValuesForKeysWithDictionary:dict];
}

return self;
}
+(instancetype)flagWithDict:(NSDictionary *)dict{
return [[self alloc] initWithDict:dict];
}
@end


***模型HMFlag.h

#import <Foundation/Foundation.h>

@interface HMFlag : NSObject

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

-(instancetype)initWithDict:(NSDictionary *)dict;
+(instancetype)flagWithDict:(NSDictionary *)dict;

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: