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
有这么两个数据源方法是必须实现的:
#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
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- 浅析iOS应用开发中线程间的通信与线程安全问题
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- 举例详解iOS开发过程中的沙盒机制与文件
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- 分享一个iOS下实现基本绘画板功能的简单方法
- javascript实现阻止iOS APP中的链接打开Safari浏览器