一、简介

<<UIPickerView是一个拔取器控件,它比UIDatePicker尤其通用,它可以生成单列的选取器,也可生成多列的采用器,而且开发者完全可以自定义接纳项的外观,由此用法非凡灵活

<<继承关系:UIPickerView –>
UIView –>UIResponder–>NSObject

<<UIPickerView间接继承了UIView,没有继承UIControl,由此,它无法像UIControl那样绑定事件处理方法,UIPickerView的事件处理由其委托对象完毕。使用UIPickerView的靶子应当听从UIPickerViewDataSource,UIPickerViewDelegate。 

格式为

1–> 设置数据源(特性的效果

[pickerView setDelegate:self];   (这是切实可行的例证

@property(nullable,nonatomic,weak) id dataSource;//
设置数据源, 默许是空的   (这是性质的认证

二、UIPickerView的习性(属性的顺序与苹果API一致)

1–>设置数据源

 [pickerView setDelegate:self]; 

@property(nullable,nonatomic,weak) id dataSource;//
设置数据源, 默许是空的,弱引用

2–>设置代理

[pickerView setDelegate:self];

@property(nullable,nonatomic,weak) id delegate;
//设置代理, 默许是空的,弱引用

3–>设置是或不是突显UIPickerView中的选中标记,在iOS7自此那些特性没有其余功效

pickerView.showsSelectionIndicator =YES;

@property(nonatomic) BOOL showsSelectionIndicator; // 默许是
NO。该属性决定是或不是展现UIPickerView中的选中标记(以高亮背景作为入选标记)

4–>获取UIPickerView指定列中涵盖的列表项的数目

NSInteger row1 =pickerView.numberOfComponents; //获取组键数(列数)

@property(nonatomic,readonly) NSInteger
numberOfComponents; /从数据源和信托获取并缓存的信息

三、UIPickerView的特性方法

1–>获取UIPickerView包罗的列数量

 NSInteger row2 = [pickerView
numberOfRowsInComponent:1];//获取对象下标组键(列数)的行数

– (NSInteger)numberOfRowsInComponent:(NSInteger)component;

2–> 获取UIPickerView包涵的指定列中列表项的大大小小。该情势再次来到一个CGSize对象。

 NSLog(@”%@”, NSStringFromCGSize(
[self.pickerView rowSizeForComponent:0])); //打印获取的每列的size;

– (CGSize)rowSizeForComponent:(NSInteger)component;

3–> 重回该UIPickerView指定列的列表项所利用的UIView控件。

UIView *pickview=[self.pickerView viewForRow:0 forComponent:0];

– (nullable UIView *)viewForRow:(NSInteger)row
forComponent:(NSInteger)component;//再次来到视图提供的信托通过pickerView:viewForRow:forComponent:reusingView:

即使行依旧零部件不可见或委托没有兑现pickerView:viewForRow:forComponent:reusingView,则为nil

4–> 重载所有分区

[pickerView reloadAllComponents];//刷新UIPickerView

– (void)reloadAllComponents;

5–> 重载某一分区

[pickerView reloadComponent:1];//刷新某一列的数额

– (void)reloadComponent:(NSInteger)component;

6–> 设置选中该UIPickerView中指定列的特定列表项

[pickerView pickerView selectRow:2 inComponent:0animated:YES]; //设置选中的第几列第几行 ,程序一先河运行时就相中该列该行

– (void)selectRow:(NSInteger)row inComponent:(NSInteger)component
animated:(BOOL)animated; //
将指定的行滚动到宗旨。该措施设置选中该UIPickerView中指定列的特定列表项。最终一个参数控制是还是不是使用动画片。

7–> 重返该UIPickerView指定列中被入选的列表项。

self.row =  [self.pickerView
selectedRowInComponent:0];//获取被选中的率先列的行数(那里是为着在给第二列赋值时用的,由此在此从前要理西汉理方法的进行顺序,以防导致不要求的bug)

– (NSInteger)selectedRowInComponent:(NSInteger)component;
//再次回到选定行。要是没有入选重临-1

四、UIPickerView的UIPickerViewDataSource

总得兑现的方法

1–>再次来到突显的列数

– (NSInteger)numberOfComponentsInPickerView:(UIPickerView*)pickerView

{

    return1;// 重临1标志该控件只包括1列

}

– (NSInteger)numberOfComponentsInPickerView:(UIPickerView
*)pickerView;//UIPickerViewDataSource中定义的措施,该办法的重返值决定该控件包涵的列数

2–>突显每组键(列数)的行数

//指定每个表盘上有几行数据

-(NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component

{

    NSInteger result = 0;

    switch (component) {

        case 0:

            result = self.letter.count;//根据数组的元素个数重返几行数据

            break;

        case 1:

            result = self.number.count;

            break;

        default:

            break;

    }

    return result;

}

– (NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component;      
//指定每个表盘上有几行数据

五、UIPickerView的UIPickerViewDelegate

可选方法

1–>重回每列的涨幅

– (CGFloat)pickerView:(UIPickerView *)pickerView
widthForComponent:(NSInteger)component{

 if (component ==0) {

 return 100;//第一组键(列)的增进率

}else{

 return 100;//第二组键(列)的宽窄

    }

}

– (CGFloat)pickerView:(UIPickerView *)pickerView
widthForComponent:(NSInteger)component
__TVOS_PROHIBITED;//该格局再次回到的CGFloat值将作为该UIPickerView控件中指定列的大幅度

2–>重临每列的万丈

– (CGFloat)pickerView:(UIPickerView *)pickerView
rowHeightForComponent:(NSInteger)component{

 if (component ==0) {

 return 100;//第一组键(列)的莫大

}else{

 return 100;//第二组键(列)的可观

    }

}

– (CGFloat)pickerView:(UIPickerView *)pickerView
rowHeightForComponent:(NSInteger)component
__TVOS_PROHIBITED;//该措施重临的CGFloat值将作为该UIPickerView控件中指定列中列表项的莫大。

3–>设置某一行突显的题目

– (NSString *)pickerView:(UIPickerView *)pickerView
titleForRow:(NSInteger)row forComponent:(NSInteger)component{

 if (component ==0) {

 return [self.content[row]objectForKey:@”State”];//再次来到省的名称

}else{

 //下边俩行代码是得到plist文件中城市的称号

 NSArray *cities = [self.content[self.row]objectForKey:@”Cities”];

 NSString *city =[cities[row] objectForKey:@”city”];

return city;

    }

}

– (nullable NSString *)pickerView:(UIPickerView *)pickerView
titleForRow:(NSInteger)row forComponent:(NSInteger)component
__TVOS_PROHIBITED;//该办法再次回到的UIView控件将一向当做该UIPickerView控件中指定列的指定列表项。

4–>通过属性字符串设置某一行展现的标题

– (NSAttributedString *)pickerView:(UIPickerView *)pickerView
attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component{

 NSString *str = [_nameArray objectAtIndex:row];

 NSMutableAttributedString *AttributedString =
[[NSMutableAttributedStringalloc]initWithString:str];

[AttributedString addAttributes:@{NSFontAttributeName:[UIFontboldSystemFontOfSize:18], NSForegroundColorAttributeName:[UIColor whiteColor]}range:NSMakeRange(0,
[AttributedString length])];

 return AttributedString;

}

– (nullable NSAttributedString *)pickerView:(UIPickerView
*)pickerView attributedTitleForRow:(NSInteger)row
forComponent:(NSInteger)component NS_AVAILABLE_IOS(6_0)
__TVOS_PROHIBITED;

<注意>假如以上三个章程都落到实处了,优先达成attributedTitleForRow的措施

5–>设置某一行呈现的view视图

//可以用UILabel 来安装字体大小 和背景颜色 是一个得以自定义设置的点子

– (UIView *)pickerView:(UIPickerView *)pickerView
viewForRow:(NSInteger)row forComponent:(NSInteger)component
reusingView:(nullable UIView*)view{

 UILabel *label;//声喜宝(Hipp)(Dumex)个UILabel

 if (component == 0) {//当是第一行

 //设置frame

label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 50)];

 //将省名赋给label.text

label.text = [self.content[row]objectForKey:@”State”];

 //改变字体的水彩

label.textColor = [UIColor yellowColor];

 //设置字体大小

label.font = [UIFont systemFontOfSize:20];//用label来安装字体大小

 //改变背景的颜料

        label.backgroundColor = [UIColor redColor];

}else if (component == 1){//当是第二行时

label  =
[[UILabel alloc] initWithFrame:CGRectMake(100, 0, 100, 50)];

 NSArray *cities = [self.content[self.row]objectForKey:@”Cities”];

 NSString *city =[cities[row] objectForKey:@”city”];

label.text = city ;//将城市名称赋给label.text

label.textColor = [UIColor purpleColor];

label.font = [UIFont systemFontOfSize:20];

        label.backgroundColor = [UIColor redColor];

    }

 return label;

}

– (UIView *)pickerView:(UIPickerView *)pickerView
viewForRow:(NSInteger)row forComponent:(NSInteger)component
reusingView:(nullable UIView *)view
__TVOS_PROHIBITED;//当用户单击选中该UIPickerView控件的指定列的指定列表项时将会激起该办法。

6–>选中某一行时执行的回调

//被入选的第几列 的 第几行

– (void)pickerView:(UIPickerView *)pickerView
didSelectRow:(NSInteger)row inComponent:(NSInteger)component{

 if(component ==0){

 //刷新对应列

        [self.pickerView reloadComponent:1];

 //当接纳第一列时 第二列切到第一行

[self.pickerView selectRow:0inComponent:component+1 animated:YES];

    }

}

– (void)pickerView:(UIPickerView *)pickerView
didSelectRow:(NSInteger)row inComponent:(NSInteger)component
__TVOS_PROHIBITED;//当用户单击选中该UIPickerView控件的指定列的指定列表项时将会激发该办法

六、UIPickerView的拓展

实际应用中UIPickerView平时和UITextField同盟使用,给咱们提供一个很便利的封装类YLSOPickerView

调用方法 

1、导入#import “YLSOPickerView.h”

2、在- (BOOL)textFieldShouldBeginEditing:(UITextField
*)textField实现

#pragma mark UITextFieldDelegate

– (BOOL)textFieldShouldBeginEditing:(UITextField *)textField

{

    if (textField.tag==401) {

        YLSOPickerView *picker = [[YLSOPickerView alloc]init];

        picker.array =
@[@”交通银行”,@”农行”,@”中国中信银行银行”,@”巴黎浦东发展银行”,@”广发银行股份有限集团”,@”平安银行”,@”中国农行”,@”中国农业银行”,@”中国工行”,@”农业银行”,@”中国交行”,@”华夏银行”,@”中国招行”,@”光大银行”];

        picker.title = bank;

        [picker show];

        UITapGestureRecognizer *tapGestureRecognizer =
[[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(keyboardHide:)];

        //设置成NO表示近日控件响应后会传播到此外控件上,默许为YES。

        tapGestureRecognizer.cancelsTouchesInView = YES;

        //将触摸事件添加到当前view

        [picker addGestureRecognizer:tapGestureRecognizer];

        return NO;

    }

    return YES;

}

3、落成申明手势注销方法

– (void)keyboardHide:(UITapGestureRecognizer *)tap

{

    YLSOPickerView *pickView=(YLSOPickerView *)tap.view;//最好用单例

    [pickView quit];

}

4、-viewDidload里面阐明公告

– (void)viewDidLoad

{

  [super viewDidLoad];

  //接受文告

[[NSNotificationCenter defaultCenter]addObserver:self
selector:@selector(getValue:) name:@”value” object:nil];

}

5、完毕文告方法

-(void)getValue:(NSNotification *)notification//点击已毕出口选中的text

{

self.textFeild.text = notification.object;

    DLog(@”%@”, self.textFeild.text);

}

参考:

iOS系统UIPickerView的简便利用和办法属性介绍

UIPickerView

iOS学习 – UIPickerView

iOS拔取器视图控件(UIPickerView)使用方法统计

YLSPicker

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图