iOS時間選擇框

jopen 8年前發布 | 1K 次閱讀 C/C++ IOS

一、頭文件

#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];
}


 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!