码迷,mamicode.com
首页 > 移动开发 > 详细

iOS基础-UIKit框架-高级视图-UIPickerView-实例3:国家选择(图片)

时间:2015-08-11 22:46:12      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:

说明:事先已经准备好了一个NJCountry类,里面声明了2个属性name和icon,并
创建和实现了快速创建类的动态方法和静态方法。直接导入即可。
0.创建一个plist文件,Root为Array,里面为字典(字典里为国家和国旗)
1.加载这个plist文件
1>声明数组属性
@property(nonatomic,strong)NSArray *countries;
2>懒加载(在实现文件最后面)
#pragma mark - 懒加载
-(NSArray *)countries
{
if(_countries == nil){
// 1.加载plist文件内容
NSArray *dictArray = [NSArray arrayWithContentsOfFile:[NSBundle  mainBundle] pathForResource:@"flags.plist" ofType:nil]];
//2.创建数组保存转换后的模型
NSMutableArray *models = [NSMutableArray arrayWithCapacity: dictArray.count];
//3.字典转模型
for(NSDcitionary *dict in dictArray){
NJCountry *flag = [NJCountry countryWithDictionary:dict];
[models addObject:flag];
}
_countries = [models copy];
}
return _countries;
}
2.将国旗图片拖到支持文件中。
3.

0>新建一个xib文件NJCountryView.xib,拖一个UIView和一个Label,新建一个
类NJCountryView来管理它。将xib文件的View的class设置为NJCountryView
1>在类扩展中将标签和View连到NJCountryView这个类。(属性)
2>在NJCountryView.h文件中将数据模型声明为属性,并提供类方法(封装xib)
@class NJCountry;
//数据模型
@property(nonatomic,strong)NJCountry *country;
+ (insancetype)countryView;
3>导入头文件并重写set方法(在这个方法里赋值)
-(void)setCountry:(NJCountry *)country
{
_country = country;
// 1.设置国家名称
self.nameLabel.text = _country.name;
// 2.设置国旗
self.iconView.image = [UIImage imageNamed:_country.icon];
}
4>实现类方法(用来快速创建自定义View)
+ (insancetype)countryView{
   return [[[NSBundle mainBundle] loadNibNamed:@"NJCountryView"  owner:nil options“nil] firstObject];
}

4.拖一个Picker View控件,点右键设置控制器和代理,遵从协议并实现方法
#pragma mark - 数据源方法
//告诉系统有多少列
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *) pickerView
{
    return 1;
}

//告诉系统有多少行
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponents:(NSInteger)component
{
    return self.countries.count;
}

#pragma mark - 代理方法
//告诉系统每一行显示什么内容
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:
(NSInteger)row forComponents:(NSInteger)component
{
     return [self.countries[row] name];
}
//告诉系统每一行显示什么视图
//当一个view进入视野范围内的时候调用
//当系统调用该方法的时候会自动传入可重用的view
-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow: (NSInteger)row forComponents:(NSInteger)component

resuingView :(UIView)view

{
//有默认的宽高
//1.创建自定义View
NJCountryView *countryView = (NJCountryView *)view;
if(countryView == nil){
countryView = [NJCountryView countryView];
}
//2.赋值模型数据
countryView.country = self.countries[row];

//3.返回自定义view
return countryView;
}

错误做法:直接在控制器返回高度
//告诉系统每一行的高度
-(CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponents:(NSInteger)component
{
    return 44;
}
//注意:直接返回高度的话封装性不好,自己多高应该自己最清楚。
正确做法:
在NJCountryView中提供一个方法返回高度
+(CGFloat)rowHeight
{
    return 54;
}
然后在控制器中调用这个方法
//告诉系统每一行的高度
-(CGFloat)pickerView:(UIPickerView *)pickerView  rowHeightForComponents:(NSInteger)component
{
     return [NJCountryView rowHeight];
}
好处:以后需要修改高度不需要修改控制器,直接修改管理它的类NJCountryView即可。

iOS基础-UIKit框架-高级视图-UIPickerView-实例3:国家选择(图片)

标签:

原文地址:http://www.cnblogs.com/marshall-yin/p/4722309.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!