UIPickerView

一、简介

<<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;//声爱他美(Aptamil)个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

发表评论

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