UIPickerView的基本使用

2018-04-17  本文已影响17人  高乔人

可以这样写一个基于UIView的分类

#import

typedefvoid(^pickerSeletedEndBlock)(idresult);

@interfaceXHWPickerView :UIView

@property (retain, nonatomic) NSArray *pickerDataArr;

@property (retain, nonatomic) UIPickerView *pickerView;

@property (nonatomic, copy) pickerSeletedEndBlock selectEndBlock;

- (void)popPickerView;

@end

#import "XHWPickerView.h"

#define XHW_W [UIScreen mainScreen].bounds.size.width

#define XHW_H [UIScreen mainScreen].bounds.size.height

#define PICKERVIEW_H300

@interface XHWPickerView()

{

    NSIntegerselectRow;

}

@property (retain, nonatomic) UIView *baseView;

@end

@implementation XHWPickerView

- (id)initWithFrame:(CGRect)frame

{

    self= [superinitWithFrame:frame];

    if(self) {

        self.backgroundColor = [UIColor colorWithWhite:0 alpha:0.3];

        _baseView = [[UIView alloc] initWithFrame:CGRectMake(0, XHW_H-PICKERVIEW_H, XHW_W, XHW_H)];

        _baseView.backgroundColor = [UIColor whiteColor];

        [selfaddSubview:_baseView];

        UIButton*btnOK = [[UIButtonalloc]initWithFrame:CGRectMake(XHW_H-50,0,40,40)];

        [btnOKsetTitle:@"确定" forState:UIControlStateNormal];

        [btnOKsetTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

        [btnOKaddTarget:self action:@selector(pickerViewBtnOK:) forControlEvents:UIControlEventTouchUpInside];

        [_baseViewaddSubview:btnOK];

        UIButton*btnCancel = [[UIButtonalloc]initWithFrame:CGRectMake(10,0,40,40)];

        [btnCancelsetTitle:@"取消" forState:UIControlStateNormal];

        [btnCancelsetTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

        [btnCanceladdTarget:self action:@selector(pickerViewBtnCancel:) forControlEvents:UIControlEventTouchUpInside];

        UIView*lineVie = [[UIViewalloc]init];

        [_baseViewaddSubview:lineVie];

        lineVie.backgroundColor= [UIColorgrayColor];

        lineVie.alpha=0.2;

        [lineViemas_makeConstraints:^(MASConstraintMaker*make) {

            make.left.right.offset(0);

            make.top.equalTo(btnOK.mas_bottom).offset(-1);

            make.height.offset(1);

        }];

        [_baseViewaddSubview:btnCancel];

        _pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 40, XHW_W, PICKERVIEW_H-40)];

        _pickerView.delegate=self;

        _pickerView.dataSource=self;

        _pickerView.backgroundColor = [UIColor whiteColor];

        [_baseView addSubview:_pickerView];

        UITapGestureRecognizer*tapGesture = [[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(dismissPickerView)];

        [selfaddGestureRecognizer:tapGesture];

    }

    return self;

}

#pragma mark - UIPickerViewDataSource

//返回多少列

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

    return 1;

}

//每列对应多少行

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

    return _pickerDataArr.count;

}

//每行显示的数据

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

    return _pickerDataArr[row];

}

#pragma mark - UIPickerViewDelegate

//选中pickerView的某一行

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

{

 selectRow= row;

}

#pragma mark - Private Menthods

//弹出pickerView

- (void)popPickerView

{

    [UIView animateWithDuration:0.5

                     animations:^{

                         self.frame=CGRectMake(0,0,XHW_W,XHW_H);

                     }];

}

//取消pickerView

- (void)dismissPickerView

{

    [UIView animateWithDuration:0.5

                     animations:^{

                         self.frame=CGRectMake(0,XHW_H,XHW_W,XHW_H);

                     }];

}

//确定

- (void)pickerViewBtnOK:(id)sender

{

    if (self.selectEndBlock) {

        self.selectEndBlock(_pickerDataArr[selectRow]);

    }

    [self dismissPickerView];

}

//取消

- (void)pickerViewBtnCancel:(id)sender

{

    if (self.selectEndBlock) {

        self.selectEndBlock(nil);

    }

    [self dismissPickerView];

}

外界使用时

 YCPickerView *pickView = [[YCPickerView alloc] init];

    pickView.arrPickerData = self.pickerData;

    [pickView.pickerView selectRow:2 inComponent:0 animated:YES];

    [self.viewaddSubview:pickView];

    pickView.frame=self.view.bounds;

    [pickViewpopPickerView];

    pickView.selectBlock= ^(NSString*str) {

        //这里可以拿到选中后的数据

        NSLog(@"%@",str);

    };

上一篇下一篇

猜你喜欢

热点阅读