iOS时间选择框

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用

一、头文件

#import <UIKit/UIKit.h>

@class ITTPickView;

@protocol ITTPickViewDelegate <NSObject>

@optional
-(void)toobarDonBtnHaveClick:(ITTPickView *)pickView
                resultString:(NSString *)resultString;

@end

@interface ITTPickView : UIView

@property(nonatomic,weak) id<ITTPickViewDelegate> delegate;//委托

/**
 *  通过时间创建一个DatePicker
 *
 *  @param date  默认选中时间
 *  @param isHaveNavControler是否在NavControler之内
 *
 *  @return 带有toolbar的datePicker
 */
-(instancetype)initDatePickWithDate:(NSDate *)defaulDate
                     datePickerMode:(UIDatePickerMode)datePickerMode
                 isHaveNavControler:(BOOL)isHaveNavControler;

/**
 *  从窗口移除本控件
 */
-(void)removeView;

/**
 *  在窗口显示本控件
 */
-(void)showView;

@end


二、ITTPickView的实现,主要的控件UIToolBar、UIDatePicker,点击确定后执行-(void)toobarDonBtnHaveClick:(ITTPickView *)pickView resultString:(NSString *)resultString(因为是可选的委托事件,实现了才会执行);获得选择的时间字符串。

#import "ITTPickView.h"
#define ITTToobarHeight 40

@interface ITTPickView ()

@property (nonatomic,assign) NSDate *defaulDate;//默认时间
@property (nonatomic,strong) UIDatePicker *datePicker;//datePicker控件
@property (nonatomic,assign) NSInteger pickeviewHeight;//pickerView的高度
@property (nonatomic,strong) UIToolbar *toolbar;//toolBar控件
@property (nonatomic,copy) NSString *resultString;//返回的时间字符串
@property (nonatomic,assign) NSInteger selfOriginy;//当前view的frame.origin.y
@property (nonatomic,assign) NSInteger selfViewInitH;//初始状态view的frame.origin.y

@end

@implementation ITTPickView


//初始化ITTPickView,
- (instancetype)initDatePickWithDate:(NSDate *)defaulDate datePickerMode:(UIDatePickerMode)datePickerMode isHaveNavControler:(BOOL)isHaveNavControler {
    
    self = [super init];
    if (self) {
        
        self.defaulDate = defaulDate;
        [self setUpDatePickerWithdatePickerMode:datePickerMode];
        [self setFrameWith:isHaveNavControler];
        [self setUpToolBar];
    }
    
    return self;
}


//设定ITTPickView的frame大小
-(void)setFrameWith:(BOOL)isHaveNavControler {
    
    CGFloat toolViewX = 0;
    CGFloat toolViewH = self.pickeviewHeight + ITTToobarHeight;
    CGFloat toolViewY;
    
    if (isHaveNavControler) {
        
        toolViewY = [UIScreen mainScreen].bounds.size.height - toolViewH - 50;
    }else {
        
        toolViewY = [UIScreen mainScreen].bounds.size.height - toolViewH;
    }
    
    CGFloat toolViewW = [UIScreen mainScreen].bounds.size.width;
    CGFloat toolViewInitH = [UIScreen mainScreen].bounds.size.height;
    self.selfViewInitH = toolViewInitH;//初始状态view的frame.origin.y
    self.selfOriginy = toolViewY;//当前view的frame.origin.y
    
    self.frame = CGRectMake(toolViewX, toolViewInitH, toolViewW, toolViewH);
}


//设定datePicker控件的样式以及frame大小,并作为view的子视图
-(void)setUpDatePickerWithdatePickerMode:(UIDatePickerMode)datePickerMode {
    
    UIDatePicker *datePicker = [[UIDatePicker alloc] init];
    datePicker.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh-CN"];
    datePicker.datePickerMode = datePickerMode;
    datePicker.backgroundColor = [UIColor whiteColor];
    
    if (self.defaulDate) {
        
        [datePicker setDate:self.defaulDate];
    }
    
    self.datePicker = datePicker;
    datePicker.frame = CGRectMake(0, ITTToobarHeight, [UIScreen mainScreen].bounds.size.width, datePicker.frame.size.height);
    self.pickeviewHeight = datePicker.frame.size.height;
    
    [self addSubview:datePicker];
}


//设置toolBar的各个属性,并作为view的子视图
- (void)setUpToolBar {
    
    self.toolbar = [self setToolbarStyle];
    [self setToolbarWithPickViewFrame];
    
    [self addSubview:self.toolbar];
}


//设置toolBar的样式
-(UIToolbar *)setToolbarStyle {
    
    UIToolbar *toolbar = [[UIToolbar alloc] init];
    
    UIBarButtonItem *left = [[UIBarButtonItem alloc] initWithTitle:@" 取消 " style:UIBarButtonItemStylePlain target:self action:@selector(removeView)];
    
    UIBarButtonItem *centerSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
    
    UIBarButtonItem *right = [[UIBarButtonItem alloc] initWithTitle:@" 确定 " style:UIBarButtonItemStylePlain target:self action:@selector(doneClick)];
    toolbar.items = @[lefttem, centerSpace, right];
    
    return toolbar;
}


//设定tooBar的frame大小
- (void)setToolbarWithPickViewFrame {
    
    self.toolbar.frame = CGRectMake(0, 0,[UIScreen mainScreen].bounds.size.width, ITTToobarHeight);
}


//点击确定按钮
-(void)doneClick {
    
    if (self.datePicker) {
        
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        dateFormatter.dateFormat = @"yyyy-MM-dd";
        self.resultString = [dateFormatter stringFromDate:self.datePicker.date];
    }
    
    if ([self.delegate respondsToSelector:@selector(toobarDonBtnHaveClick:resultString:)]) {
        
        [self.delegate toobarDonBtnHaveClick:self resultString:self.resultString];
    }
    
    [self removeView];
}


/**
 *  从窗口移除本控件
 */
- (void)removeView {
    
    [UIView animateWithDuration:0.25f animations:^{
        
        self.frame = CGRectMake(self.frame.origin.x, self.selfViewInitH, self.frame.size.width, self.frame.size.height);
        
    } completion:^(BOOL finished) {
        
        if (finished) {
            
            [self removeFromSuperview];
        }
    }];
}


/**
 *  在窗口显示本控件
 */
- (void)showView {
    
    [[UIApplication sharedApplication].keyWindow addSubview:self];
    [UIView animateWithDuration:0.25f animations:^{
        
        self.frame = CGRectMake(self.frame.origin.x, self.selfOriginy, self.frame.size.width, self.frame.size.height);
        
    } completion:^(BOOL finished) {
        
        
    }];
}
@end


三、运用ITTPickView

UIButton *testBitton = [[UIButton alloc] initWithFrame:CGRectMake(0, 450, 111, 40)];
[testBitton setBackgroundColor:[UIColor redColor]];
  
[testBitton addTarget:self action:@selector(test) forControlEvents:UIControlEventTouchUpInside];


//点击按钮弹出时间选择框
- (void)test {
    
    ITTPickView *datePicker = [[ITTPickView alloc] initDatePickWithDate:[NSDate date] datePickerMode:UIDatePickerModeDate isHaveNavControler:NO];
    
    [datePicker showView];
}


标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:ImageSwitcher实现引导页效果

下一篇:Android画板实现