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

iOS 【UIKit-UIPickerView】

2015-11-23 17:06 423 查看
UIPickerView和UITableView差不多,使用方式也都大致相仿。

有这么两个数据源方法是必须实现的:

#pragma mark - 数据源方法
// returns the number of 'columns' to display.
// 这个UIDatePicker中有几组,也就是有几列
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}

// returns the # of rows in each component..
// 每组(每列)中有几行数据
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return self.flagsArr.count;
}

还有这么几个代理方法,一般也是需要实现的:
#pragma mark - 代理方法
//下面这个方法(titleForRow)是设置系统自定义的pickerView的,并不是设置我们个人自定义的pickerView的。在此我们如果要加上图片就要用自定义pickerView
//的代理方法了
//
//- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
//{
// Flags *flag = self.flagsArr[row];
// return flag.name;
//}

//自定义pickerView的cellView
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:
(UIView *)view
//后面的reusingView:(UIView *)view这个参数表示的是是否有可重用view
{
Flags *flag = self.flagsArr[row];//取出模型中的值

// 创建view,但是我们这里需要判断一下是不是有可重用的view供我们使用
FlagView *flagView = nil;//先创建一个flagView让它为nil,然后根据后面的条件判断是否需要再实例化出来一个

if (view != nil) {
flagView = (FlagView *)view;//这里需要强制类型转换
} else {
// 没有才需要创建
flagView = [FlagView flagView];
}
// 不管有没有可重用的view,都要对其进行赋值和返回结果。
flagView.flags = flag;
return flagView;
}

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

另外,我们自定义pickerView的cellView,一般是要使用xib去自定义视图。
新建一个类,这个类就和xib视图关联起来。下面我写一个简单的pickerView的cellView的类让大家了解。

//FlagView.h

#import <UIKit/UIKit.h>
@class Flags; //xib关联的类的头文件中我们要引入我们之前定义好的模型类,然后在其中定义一个模型类的实例化对象作为属性

@interface FlagView : UIView
@property (nonatomic, strong) Flags *flags;//模型类的实例化对象作为属性,目的是为了给xib中的元素赋值

+ (instancetype)flagView;//这个类方法就是关联xib文件的

@end

//FlagView.m

#import "FlagView.h"
#import "Flags.h"

@interface FlagView ()

@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
@property (weak, nonatomic) IBOutlet UIImageView *flagView;

@end

@implementation FlagView

//返回xib视图中的一个元素(这里可以理解为调用xib视图,也就是没有可重用xib视图cellView的话,就要调用该方法)
+ (instancetype)flagView
{
return [[[NSBundle mainBundle] loadNibNamed:@"FlagView" owner:nil options:nil] firstObject];
}

//在flags属性的set方法中为xib的元素赋值
- (void)setFlags:(Flags *)flags
{
_flags = flags;
//将模型中的属性值赋给xib中的模块属性
 self.nameLabel.text = flags.name;
self.flagView.image = [UIImage imageNamed:flags.icon];
}

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