PickerView的封装
来源:互联网 发布:cnc编程招聘信息 编辑:程序博客网 时间:2024/06/05 07:47
PickerView的封装
平时我在使用PickerView的时候,比较麻烦,要配置各种设置,本文就是主要介绍了如何封装了一个比较齐全的PickerView,其中可以直接用DatePickerView的四个基本类型以及一个自定义类型:
PickerViewTypeDate_Time,
PickerViewTypeDate_Date,
PickerViewTypeDate_DateAndTime,
PickerViewTypeDate_Timer,
PickerViewTypeData,
使用的时候,也是很方便的!
开源代码 - Github
使用的时候的代码
PickerView * picker = [PickerView showPickerViewInView:view withType:button.tag];// PickerView * picker = [PickerView showPickerViewInkeyWindowTopWithType:button.tag];// PickerView * picker = [PickerView showPickerViewInVCTop:self withType:button.tag]; picker.dataSources = @[@[@"aaa",@"aab"],@[@"baa",@"bab"],@[@"caa",@"cab",@"cac"]]; // 获取选中的信息 [picker setSelectBlock:^(NSObject *data, BOOL isSureBtn) { NSLog(@"%@ -- %d",data,isSureBtn); }];
PickerView.h//// PickerView.h// TouGuApp//// Created by tianshikechuang on 16/7/18.// Copyright © 2016年 tianshikechuang. All rights reserved.//#import <UIKit/UIKit.h>typedef enum PickerViewType : NSUInteger { PickerViewTypeDate_Time, PickerViewTypeDate_Date, PickerViewTypeDate_DateAndTime, PickerViewTypeDate_Timer, PickerViewTypeData,} PickerViewType;typedef void(^DidSelectBlock)(NSObject * data,BOOL isSureBtn);@interface PickerView : UIView/** * 传入的值必须是嵌套的数组 @[@[@"aaa",@"aab"],@[@"baa",@"bab"],@[@"caa",@"cab",@"cac"]] */@property(nonatomic, strong) NSArray * dataSources;@property(nonatomic, strong) DidSelectBlock selectBlock;@property(nonatomic, assign) PickerViewType pickerType;@property(nonatomic, assign) CGFloat contentHeight;//////////////////////////////////////////////////////////////////////////////////////////// PickerViewTypeDate -- 对应的属性 与 方法//////////////////////////////////////////////////////////////////////////////////////////@property (nonatomic, strong) NSDate *minimumDate;@property (nonatomic, strong) NSDate *maximumDate;@property (nonatomic) NSTimeInterval countDownDuration;@property (nonatomic) NSInteger minuteInterval;- (void)setDate:(NSDate *)date animated:(BOOL)animated;/////////////////////////////////////////////////////////////////////////////////////+ (PickerView *)showPickerViewInkeyWindowTopWithType:(PickerViewType)type;+ (PickerView *)showPickerViewInVCTop:(UIViewController *)VC withType:(PickerViewType)type;+ (PickerView *)showPickerViewInView:(UIView *)view withType:(PickerViewType)type;- (void)setSelectBlock:(DidSelectBlock)selectBlock;@end
PickerView.m//// PickerView.m// TouGuApp//// Created by tianshikechuang on 16/7/18.// Copyright © 2016年 tianshikechuang. All rights reserved.//#import "PickerView.h"#define screenWidth [UIScreen mainScreen].bounds.size.width#define screenHeight [UIScreen mainScreen].bounds.size.height@interface PickerView () <UIPickerViewDelegate,UIPickerViewDataSource>{}@property(nonatomic, strong) UIPickerView * pickerView;@property(nonatomic, strong) UIDatePicker * datePicker;@property(nonatomic, strong) NSMutableArray * selectArr;@end@implementation PickerView+ (PickerView *)showPickerViewInkeyWindowTopWithType:(PickerViewType)type{ UIView * view = [UIApplication sharedApplication].keyWindow; return [self showPickerViewInView:view withType:type];}+ (PickerView *)showPickerViewInVCTop:(UIViewController *)VC withType:(PickerViewType)type{ UIView * view; if (VC.tabBarController) { view = VC.tabBarController.view; }else if (VC.navigationController){ view = VC.navigationController.view; }else{ view = VC.view; } return [self showPickerViewInView:view withType:type];}+ (PickerView *)showPickerViewInView:(UIView *)view withType:(PickerViewType)type{ PickerView * picker = [[PickerView alloc] initWithFrame:CGRectMake(0, 0, screenWidth, screenHeight)]; picker.pickerType = type; [picker showInView:view]; [picker addSureAndCancelButton]; return picker;}- (instancetype)initWithFrame:(CGRect)frame{ if (self = [super initWithFrame:frame]) { self.frame = CGRectMake(0, 0, screenWidth, screenHeight); self.selectArr = [NSMutableArray array]; self.contentHeight = 230; UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(removeFromSuperview)]; tap.numberOfTapsRequired = 2; [self addGestureRecognizer:tap]; } return self;}- (UIPickerView *)pickerView{ if (_datePicker) { [_datePicker removeFromSuperview]; } if (!_pickerView) { _pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, screenHeight - self.contentHeight, screenWidth, self.contentHeight)]; _pickerView.backgroundColor = [UIColor redColor]; _pickerView.delegate = self; _pickerView.dataSource = self; } return _pickerView;}- (UIDatePicker *)datePicker{ if (_pickerView) { [_pickerView removeFromSuperview]; } if (!_datePicker) { _datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, screenHeight - self.contentHeight, screenWidth, self.contentHeight)]; _datePicker.backgroundColor = [UIColor greenColor]; _datePicker.date = [NSDate date]; [_datePicker addTarget:self action:@selector(datePickerAction:) forControlEvents:UIControlEventValueChanged]; } return _datePicker;}// 设置PickerView 的类型- (void)setPickerType:(PickerViewType)pickerType{ _pickerType = pickerType; switch (pickerType) { case PickerViewTypeDate_Time: self.datePicker.datePickerMode = UIDatePickerModeTime; [self addSubview:self.datePicker]; break; case PickerViewTypeDate_Date: self.datePicker.datePickerMode = UIDatePickerModeDate; [self addSubview:self.datePicker]; break; case PickerViewTypeDate_DateAndTime: self.datePicker.datePickerMode = UIDatePickerModeDateAndTime; [self addSubview:self.datePicker]; break; case PickerViewTypeDate_Timer: self.datePicker.datePickerMode = UIDatePickerModeCountDownTimer; [self addSubview:self.datePicker]; break; case PickerViewTypeData: [self addSubview:self.pickerView]; break; default: break; }}- (void)setDataSources:(NSArray *)dataSources{ _dataSources = dataSources; for (NSArray * arr in dataSources) { if (![arr isKindOfClass:[NSArray class]]) { _dataSources = @[]; NSLog(@"\n\n--------- 传入的dataSources格式有误,请传入嵌套数组! (@[@[@\"1 - 1\",@\"1 - 2\"],@[@\"2 - 1\",@\"2 - 2\"]]) --------\n\n"); return; } [self.selectArr addObject:[arr firstObject]]; }}- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ if (self.dataSources) { return self.dataSources.count; }else{ return 0; }}- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ if (self.dataSources[component]) { NSArray * arr = self.dataSources[component]; return arr.count; }else{ return 0; }}- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ NSArray * arr = self.dataSources[component]; return [arr objectAtIndex:row];}- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ NSArray * arr = self.dataSources[component]; [self.selectArr replaceObjectAtIndex:component withObject:[arr objectAtIndex:row]]; if (self.selectBlock) { self.selectBlock(self.selectArr,NO); }}- (void)addSureAndCancelButton{ UIView * buttonView = [[UIView alloc] initWithFrame:CGRectMake(0, screenHeight - self.contentHeight - 40, screenWidth, 40)]; buttonView.backgroundColor = [UIColor grayColor]; [self addSubview:buttonView]; UIButton * cancel = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 40)]; [cancel setTitle:@"取消" forState:UIControlStateNormal]; [cancel addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside]; [buttonView addSubview:cancel]; UIButton * sure = [[UIButton alloc] initWithFrame:CGRectMake(screenWidth - 100, 0, 100, 40)]; [sure setTitle:@"确定" forState:UIControlStateNormal]; [sure addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside]; [buttonView addSubview:sure]; sure.tag = 101;}- (void)buttonAction:(UIButton *)button{ [self removeFromSuperview]; if (self.selectBlock && button.tag == 101) { if (self.pickerType == PickerViewTypeData) { self.selectBlock(self.selectArr,YES); }else{ self.selectBlock(self.datePicker.date,YES); } }}- (void)datePickerAction:(UIDatePicker *)picker{ if (self.selectBlock) { self.selectBlock(picker.date,NO); }}- (void)showInView:(UIView *)view{ [view addSubview:self]; self.frame = CGRectMake(0, screenHeight, screenWidth, 0); [UIView animateWithDuration:0.8 animations:^{ self.frame = CGRectMake(0, 0, screenWidth, screenHeight); }];}- (void)removeFromSuperview{ [UIView animateWithDuration:0.8 animations:^{ self.frame = CGRectMake(0, screenHeight, screenWidth, screenHeight); } completion:^(BOOL finished) { [super removeFromSuperview]; }];}//////////////////////////////////////////////////////////////////////////////////////////// PickerViewTypeDate -- 对应的属性 与 方法//////////////////////////////////////////////////////////////////////////////////////////- (void)setMinimumDate:(NSDate *)minimumDate{ [self.datePicker setMinimumDate:minimumDate];}- (NSDate *)minimumDate{ return self.datePicker.minimumDate;}- (void)setMaximumDate:(NSDate *)maximumDate{ [self.datePicker setMaximumDate:maximumDate];}- (NSDate *)maximumDate{ return self.datePicker.maximumDate;}- (void)setCountDownDuration:(NSTimeInterval)countDownDuration{ [self.datePicker setCountDownDuration:countDownDuration];}- (NSTimeInterval)countDownDuration{ return self.datePicker.countDownDuration;}- (void)setMinuteInterval:(NSInteger)minuteInterval{ [self.datePicker setMinuteInterval:minuteInterval];}- (NSInteger)minuteInterval{ return self.datePicker.minuteInterval;}- (void)setDate:(NSDate *)date animated:(BOOL)animated{ [self.datePicker setDate:date animated:animated];}//////////////////////////////////////////////////////////////////////////////////////////@end
0 0
- PickerView的封装
- PickerView封装
- pickerView的简单说明
- pickerView的一些用法
- pickerView的一些用法
- pickerView的一些用法
- PickerView 的使用方法
- Android PickerView的实现
- PickerView的用法
- Android-PickerView的使用
- 仿ios的PickerView
- PickerView
- PickerView
- pickerView
- PickerView
- PickerView
- PickerView的相关属性用法
- 如何隐藏PickerView的两条线
- 【OpenCV笔记 11】OpenCV中基本阈值化操作函数threshold()
- Hadoop YARN事件库
- 生产者消费者模型和读者写者模型
- ZZULI-1194: 总成绩排序(结构体专题)
- HDU-1150-Machine Schedule【最小点覆盖】【二分图匹配】
- PickerView的封装
- JZOJ 2964.Memory
- git学习笔记2
- react native ES6语法规则记录
- java.lang.Math
- excel打开csv 出现乱码怎么解决
- java导出excel大量数据出现错误时解决办法
- 高效学习OpenGL之执行多个显示列表glListBase(),glCallLists()
- android学习笔记之基本事件的响应