IOS 取值控件(UIPicker)的使用方法

1.简单地取值控件示例

我们要做的一个UITextFiled,当点击UITextFiled,出现一个UIPick取值的页面,可以选择性别,在viewDidLoad中写下

//sexPicker

    UIPickerView *sexPicker=[[UIPickerView alloc]init];

    sexPicker.showsSelectionIndicator=YES;

    sexPicker.delegate=self;

    sexPicker.dataSource=self;

    self.sex.inputView=sexPicker;

对于数据源回调函数和代理回调函数的实现,代码如下:

 1 #pragma sexPicker

 2 -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView

 3 {

 4     return rSexComponentCount;

 5 }

 6 

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

 8 {

 9     return rSexRowCount;

10 }

11 

12 -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component

13 {

14     if(0==row)

15     {

16         return @"Male";

17     }

18     else

19     {

20         return @"Female";

21     }

22 }

23 

24 -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component

25 {

26     if (0==row) {

27         self.sex.text=@"Male";

28     }

29     else

30     {

31         self.sex.text=@"FeMale";

32     }

33 }

显示结果如图:IOS 取值控件(UIPicker)的使用方法

2.UIPickData的使用

在viewDidLoad中添加如下代码:

//birthday Picker Choose

    self.birthdate.clearButtonMode=UITextFieldViewModeNever;

    UIDatePicker *birthPicker=[[UIDatePicker alloc]init];

    birthPicker.datePickerMode=UIDatePickerModeDate;

    //birthPicker.locale=[[NSLocale alloc]initWithLocaleIdentifier:<#(NSString *)#>];

    NSDateFormatter *formatter=[[NSDateFormatter alloc]init];

    formatter.dateFormat=@"MM-dd-yyyy";

    NSString *stdDate=@"01-01-1990";

    birthPicker.date=[formatter dateFromString:stdDate];

    [birthPicker addTarget:self action:@selector(chooseDate:) forControlEvents:UIControlEventValueChanged];

    self.birthdate.inputView=birthPicker;

其的触发事件函数

#pragma DatePicker

-(void)chooseDate:(UIDatePicker *)datePicker

{

    NSDate *date=datePicker.date;

    NSDateFormatter *formatter=[[NSDateFormatter alloc]init];

    formatter.dateFormat=@"MM-dd-yyyy";

    NSString *dateString=[formatter stringFromDate:date];

    self.birthdate.text=dateString;

    

    //[showAllBarButton appendString:[[NSString alloc] initWithString:dateString]];

    //self.barButtonItem.title=showAllBarButton;

    

}

运行结果:IOS 取值控件(UIPicker)的使用方法

3.自定义UIPicker的选项外观

 除了通过简单的字符串进行UIPicker的显示之外,系统也提供了自定义视图的方法来为每一个选项进行自定义,API如下:

-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view

虽然在每次调用此方法时都重新生成一个全新的UIView子类对象,配置完后返回给调用者也能够达到自定义选项的效果。不过就像UITableView的重用机制般,这里也必须考虑到当选项数量特别巨大时,有理由使用此代理方法提供的reusingView参数来重用之前的视图。

所以为了方便维护和扩展起见,专门新建一个自定义的UIView子类比较好,取名为customRowView,考虑到需要让此类有一定的外部配置功能,所以customRowView的头文件可以设置如下:

 1 #import <UIKit/UIKit.h>

 2 

 3 #define CUSTOM_HEIGHT 60.0f

 4 #define CUSTOM_WIDTH 240.0f

 5 

 6 @interface HBCustomRowView : UIView

 7 {

 8     @private

 9     UIImageView *_photoView;

10     UILabel *_nameLabel;

11 }

12 

13 @property(nonatomic,retain) UIImage *photo;

14 @property(nonatomic,retain) NSString *name;

15 

16 @end

上述代码中,两个属性photo和name是专供外部进行重用配置的,而长度的宏定义是为新建对象和实现特定UIPicker代理方法服务。

- (void)drawRect:(CGRect)rect

{

    // Drawing code

    //照片

    if (!_photoView) {

        _photoView = [[UIImageView alloc]initWithFrame:CGRectMake(10.0f, 0.0f, CGRectGetWidth(self.frame)-50.0f, CGRectGetHeight(self.frame))];

        

        _photoView.backgroundColor = [UIColor clearColor];

        [self addSubview:_photoView];

    }

    

    _photoView.image=self.photo;

    

    //球员名字

    if (!_nameLabel) {

        _nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(CGRectGetMaxX(_photoView.frame), 0.0f, CGRectGetWidth(self.frame)-CGRectGetMaxX(_photoView.frame)-5.0f, CGRectGetHeight(self.frame))];

        _nameLabel.backgroundColor = [UIColor clearColor];

        _nameLabel.textAlignment = NSTextAlignmentRight;

        _nameLabel.textColor = [UIColor darkGrayColor];

        _nameLabel.shadowColor = [UIColor blackColor];

        _nameLabel.shadowOffset = CGSizeMake(1.0f, 1.0f);

        _nameLabel.numberOfLines=0;

        _nameLabel.font = [UIFont systemFontOfSize:14.0f];

        

        [self addSubview:_nameLabel];

    }

    _nameLabel.text=self.name;

}

然后需要UIPickerView准备一个数据源对象和代理对象,此对象的相关代码实现如下:

#pragma mark-

#pragma mark UIPicker datasource

//几列

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView

{

    //只显示球员

    return 1;

}



//每列多少行选项

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

{

    return _datasource.count;

}



#pragma mark-

#pragma mark UIPicker delegate

//每列的宽度

-(CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component

{

    return 240.0f;

}



//每列的高

-(CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component

{

    return 60.0f;

}



//那列第几行的内容的标题

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

{

    return @"";

}



//选中任何列的某一行

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

{

}



//自定义UIPickerView的选项视图

-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view

{

    HBCustomRowView *aCustomView = nil;

    HBPlayerInfo *onePlayer =nil;

    

    //异常

    if(row>=_datasource.count)

    {

        return [[UIView alloc]init];

    }

    //取出相应的球员对象

    NSDictionary *player=[_datasource objectAtIndex:row];

    onePlayer.name=[player objectForKey:@"name"];

    onePlayer.role=[player objectForKey:@"role"];

    onePlayer.number=[player objectForKey:@"number"];

    if(view)

    {

        //重用

        aCustomView=(HBCustomRowView *)view;

        

        //让重用的视图再次调用drawRect方法

        [aCustomView setNeedsDisplay];

    }

    else

    {

        //新建

        aCustomView =[[HBCustomRowView alloc]initWithFrame:CGRectMake(0.0f, 0.0f, 240.0f, 60.0f)];

        aCustomView.backgroundColor=[UIColor clearColor];

    }

    

    //配置自定义视图

    aCustomView.photo = [UIImage imageNamed:@"gaolin.jpeg"];

    aCustomView.name=onePlayer.name;

    

    return  aCustomView;

}

 

你可能感兴趣的:(ios)