iOS 時間選擇器(多種)-傾城孤月


//首先,添加調用時間基類

//

//  SPDateTimePickerView.h

//  SPDateTimePickerViewDemo

//

//  Created by 123456789 on 2018/2/2.

//  Copyright © 2018年 123456789. All rights reserved.

//

 

#import <UIKit/UIKit.h>

 

 

typedef NS_ENUM(NSInteger, SPDatePickerViewMode) {

    SPDatePickerModeYear = 0,              //年

    SPDatePickerModeYearAndMonth,          //年月

    SPDatePickerModeDate,                  //年月日

    SPDatePickerModeDateHour,              //年月日時

    SPDatePickerModeDateHourMinute,        //年月日時分

    SPDatePickerModeDateHourMinuteSecond,  //年月日時分秒

    SPDatePickerModeTime,                  //時分

    SPDatePickerModeTimeAndSecond,         //時分秒

    SPDatePickerModeMinuteAndSecond,       //分秒

    //SPDatePickerModeDateAndTime,           //月日周 時分

};

 

@protocol SPDateTimePickerViewDelegate <NSObject>

@optional

/**

 * 確定按鈕

 */

- (void)didClickFinishDateTimePickerView:(NSString*)date;

/**

 * 取消按鈕

 */

- (void)didClickCancelDateTimePickerView;

@end

 

@interface SPDateTimePickerView : UIView

/**

 * 設置當前時間

 */

@property(nonatomic, strong)NSDate *currentDate;

/**

 * 設置中心標題文字

 */

@property(nonatomic, copy)NSString *title;

 

@property(nonatomic, strong)id<SPDateTimePickerViewDelegate>delegate;

/**

 * 時間模式

 */

@property (nonatomic, assign)SPDatePickerViewMode pickerViewMode;

 

/**

 * 隱藏

 */

- (void)hideDateTimePickerView;

/**

 * 顯示

 */

- (void)showDateTimePickerView;

@end

 

 

2.其中.m文件如下

//

//  SPDateTimePickerView.m

//  SPDateTimePickerViewDemo

//

//  Created by 123456789 on 2018/2/2.

//  Copyright © 2018年 123456789. All rights reserved.

//

 

#import "SPDateTimePickerView.h"

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

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

#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

// 獲取RGB顏色

#define RGBA(r,g,b,a) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:a]

 

@interface SPDateTimePickerView()<UIPickerViewDataSource, UIPickerViewDelegate>

{

    NSInteger yearRange;

    NSInteger dayRange;

    NSInteger startYear;

    NSInteger selectedYear;

    NSInteger selectedMonth;

    NSInteger selectedDay;

    NSInteger selectedHour;

    NSInteger selectedMinute;

    NSInteger selectedSecond;

    NSCalendar *calendar;

    

}

@property (nonatomic,strong) UIView *contentView; //背景View

@property (nonatomic,strong) UIPickerView *pickerView;

@property (nonatomic,strong) UIView *upView; //盛放按鈕的View

@property (nonatomic,strong) UIButton *cancelButton; //左邊退出按鈕

@property (nonatomic,strong) UIButton *chooseButton; //右邊的確定按鈕

@property (nonatomic,strong) UILabel *titleLabel; //標題

@property (nonatomic,strong) UIView *splitView; //分割線

@property (nonatomic,strong) NSString *string;

@property (nonatomic,strong) UIView *bgView;

@property (nonatomic,strong) NSArray *columnArray;//存放每種情況需要分割的列

@end

 

@implementation SPDateTimePickerView

#pragma mark - 懶加載

- (UIView *)contentView {

    if (!_contentView) {

        _contentView = [[UIView alloc] initWithFrame:CGRectMake(0, ScreenHeight, ScreenWith, 220)];

        _contentView.backgroundColor = [UIColor whiteColor];

    }

    return _contentView;

}

- (UIPickerView *)pickerView {

    if (!_pickerView) {

        _pickerView = [[UIPickerView alloc]initWithFrame:CGRectMake(0, 40, [UIScreen mainScreen].bounds.size.width, 180)];

        _pickerView.backgroundColor = [UIColor whiteColor];

        _pickerView.dataSource=self;

        _pickerView.delegate=self;

    }

    return _pickerView;

}

- (UIView *)upView{

    if (!_upView) {

        _upView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 40)];

        _upView.backgroundColor = [UIColor whiteColor];

    }

    return _upView;

}

- (UIButton *)cancelButton {

    if (!_cancelButton) {

        _cancelButton = [UIButton buttonWithType:UIButtonTypeCustom];

        _cancelButton.frame = CGRectMake(12, 0, 40, 40);

        [_cancelButton setTitle:@"取消" forState:UIControlStateNormal];

        _cancelButton.backgroundColor = [UIColor clearColor];

        _cancelButton.titleLabel.font = [UIFont systemFontOfSize:15];

        [_cancelButton setTitleColor:UIColorFromRGB(0x0d8bf5) forState:UIControlStateNormal];

        [_cancelButton addTarget:self action:@selector(cancelButtonClick) forControlEvents:UIControlEventTouchUpInside];

    }

    return _cancelButton;

}

- (UIButton *)chooseButton {

    if (!_chooseButton) {

        _chooseButton = [UIButton buttonWithType:UIButtonTypeCustom];

        _chooseButton.frame = CGRectMake([UIScreen mainScreen].bounds.size.width - 52, 0, 40, 40);

        [_chooseButton setTitle:@"確定" forState:UIControlStateNormal];

        _chooseButton.backgroundColor = [UIColor clearColor];

        _chooseButton.titleLabel.font = [UIFont systemFontOfSize:15];

        [_chooseButton setTitleColor:UIColorFromRGB(0x0d8bf5) forState:UIControlStateNormal];

        [_chooseButton addTarget:self action:@selector(configButtonClick) forControlEvents:UIControlEventTouchUpInside];

    }

    return _chooseButton;

}

- (UILabel *)titleLabel {

    if (!_titleLabel) {

        _titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(CGRectGetMaxX(self.cancelButton.frame), 0, ScreenWith - 104, 40)];

        _titleLabel.textColor = [UIColor blackColor];

        _titleLabel.font = [UIFont systemFontOfSize:14];

        _titleLabel.textAlignment = NSTextAlignmentCenter;

        _titleLabel.text = @"時間選擇器";

    }

    return _titleLabel;

}

- (UIView *)splitView {

    if (!_splitView) {

        _splitView = [[UIView alloc] initWithFrame:CGRectMake(0, 40, [UIScreen mainScreen].bounds.size.width, 0.5)];

        _splitView.backgroundColor = UIColorFromRGB(0xe6e6e6);

    }

    return _splitView;

}

#pragma mark - 初始化

- (instancetype)initWithFrame:(CGRect)frame{

    self = [super initWithFrame:frame];

    if (self) {

        

        self.backgroundColor = RGBA(0, 0, 0, 0.5);

        self.alpha = 0;

        // 存放每種情況需要分割的列

        self.columnArray = @[@(1),@(2),@(3),@(4),@(5),@(6),@(2),@(3),@(2)];

        

        

        // 1.添加子控件

        [self addSubview:self.contentView];

        [self.contentView addSubview:self.pickerView];

        [self.contentView addSubview:self.upView];

        [self.upView addSubview:self.cancelButton];

        [self.upView addSubview:self.chooseButton];

        [self.upView addSubview:self.titleLabel];

        [self.upView addSubview:self.splitView];

        

        // 2.獲取當前時間

        NSCalendar *calendar0 = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

        NSDateComponents *comps = [[NSDateComponents alloc] init];

        NSInteger unitFlags =  NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute;

        comps = [calendar0 components:unitFlags fromDate:[NSDate date]];

        NSInteger year = [comps year];

        

        startYear = year-15;

        yearRange = 50;

        [self setCurrentDate:[NSDate date]];

    }

    return self;

}

#pragma mark - setter

- (void)setTitle:(NSString *)title {

    _title = title;

    self.titleLabel.text = title;

}

 

#pragma mark - UIPickerViewDataSource

// 多少列

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView

{

    return [self.columnArray[self.pickerViewMode] integerValue];

}

//確定每一列返回的東西

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

{

    switch (self.pickerViewMode) {

        case SPDatePickerModeYear: //年

        {

            switch (component) {

                case 0:

                {

                    return yearRange;

                }

                    break;

                    

                default:

                    break;

            }

        }

            break;

        case SPDatePickerModeYearAndMonth://年月

        {

            switch (component) {

                case 0:

                {

                    return yearRange;

                }

                    break;

                case 1:

                {

                    return 12;

                }

                    

                default:

                    break;

            }

        }

            break;

        case SPDatePickerModeDate://年月日

        {

            switch (component) {

                case 0:

                {

                    return yearRange;

                }

                    break;

                case 1:

                {

                    return 12;

                }

                case 2:

                {

                    return dayRange;

                }

                    break;

                    

                default:

                    break;

            }

        }

            break;

        case SPDatePickerModeDateHour://年月日時

        {

            switch (component) {

                case 0:

                {

                    return yearRange;

                }

                    break;

                case 1:

                {

                    return 12;

                }

                case 2:

                {

                    return dayRange;

                }

                    break;

                case 3:

                {

                    return 24;

                }

                    break;

                    

                default:

                    break;

            }

        }

            break;

        case SPDatePickerModeDateHourMinute://年月日時分

        {

            switch (component) {

                case 0:

                {

                    return yearRange;

                }

                    break;

                case 1:

                {

                    return 12;

                }

                case 2:

                {

                    return dayRange;

                }

                    break;

                case 3:

                {

                    return 24;

                }

                    break;

                case 4:

                {

                    return 60;

                }

                    break;

                default:

                    break;

            }

        }

            break;

        case SPDatePickerModeDateHourMinuteSecond://年月日時分秒

        {

            switch (component) {

                case 0:

                {

                    return yearRange;

                }

                    break;

                case 1:

                {

                    return 12;

                }

                case 2:

                {

                    return dayRange;

                }

                    break;

                case 3:

                {

                    return 24;

                }

                    break;

                case 4:

                {

                    return 60;

                }

                    break;

                case 5:

                {

                    return 60;

                }

                    break;

                default:

                    break;

            }

        }

            break;

        case SPDatePickerModeTime://時分

        {

            switch (component) {

                    

                case 0:

                {

                    return 24;

                }

                    break;

                case 1:

                {

                    return 60;

                }

                    break;

                    

                default:

                    break;

            }

        }

            break;

        case SPDatePickerModeTimeAndSecond://時分秒

        {

            switch (component) {

                    

                case 0:

                {

                    return 24;

                }

                    break;

                case 1:

                {

                    return 60;

                }

                    break;

                case 2:

                {

                    return 60;

                }

                    break;

                    

                default:

                    break;

            }

        }

            break;

        case SPDatePickerModeMinuteAndSecond://分秒

        {

            switch (component) {

                    

                case 0:

                {

                    return 60;

                }

                    break;

                case 1:

                {

                    return 60;

                }

                    break;

                    

                default:

                    break;

            }

        }

            break;

            

        default:

            break;

    }

    

    return 0;

}

#pragma mark  UIPickerViewDelegate

// 默認時間的處理

-(void)setCurrentDate:(NSDate *)currentDate

{

    // 獲取當前時間

    NSCalendar *calendar0 = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

    NSDateComponents *comps = [[NSDateComponents alloc] init];

    NSInteger unitFlags =  NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;

    comps = [calendar0 components:unitFlags fromDate:currentDate];

    NSInteger year   = [comps year];

    NSInteger month  = [comps month];

    NSInteger day    = [comps day];

    NSInteger hour   = [comps hour];

    NSInteger minute = [comps minute];

    NSInteger second = [comps second];

    

    selectedYear     = year;

    selectedMonth    = month;

    selectedDay      = day;

    selectedHour     = hour;

    selectedMinute   = minute;

    selectedSecond   = second;

    

    

    dayRange = [self isAllDay:year andMonth:month];

    

    switch (self.pickerViewMode) {

        case 0:

        {

            [self.pickerView selectRow:year-startYear inComponent:0 animated:NO];

            [self pickerView:self.pickerView didSelectRow:year-startYear inComponent:0];

 

        }

            break;

        case 1:

        {

            [self.pickerView selectRow:year-startYear inComponent:0 animated:NO];

            [self.pickerView selectRow:month-1 inComponent:1 animated:NO];

            

            [self pickerView:self.pickerView didSelectRow:year-startYear inComponent:0];

            [self pickerView:self.pickerView didSelectRow:month-1 inComponent:1];

        }

            break;

        case 2:

        {

            [self.pickerView selectRow:year-startYear inComponent:0 animated:NO];

            [self.pickerView selectRow:month-1 inComponent:1 animated:NO];

            [self.pickerView selectRow:day-1 inComponent:2 animated:NO];

            

            [self pickerView:self.pickerView didSelectRow:year-startYear inComponent:0];

            [self pickerView:self.pickerView didSelectRow:month-1 inComponent:1];

            [self pickerView:self.pickerView didSelectRow:day-1 inComponent:2];

        }

            break;

        case 3:

        {

            [self.pickerView selectRow:year-startYear inComponent:0 animated:NO];

            [self.pickerView selectRow:month-1 inComponent:1 animated:NO];

            [self.pickerView selectRow:day-1 inComponent:2 animated:NO];

            [self.pickerView selectRow:hour inComponent:3 animated:NO];

            

            [self pickerView:self.pickerView didSelectRow:year-startYear inComponent:0];

            [self pickerView:self.pickerView didSelectRow:month-1 inComponent:1];

            [self pickerView:self.pickerView didSelectRow:day-1 inComponent:2];

            [self pickerView:self.pickerView didSelectRow:hour inComponent:3];

        }

            break;

        case 4:

        {

            [self.pickerView selectRow:year-startYear inComponent:0 animated:NO];

            [self.pickerView selectRow:month-1 inComponent:1 animated:NO];

            [self.pickerView selectRow:day-1 inComponent:2 animated:NO];

            [self.pickerView selectRow:hour inComponent:3 animated:NO];

            [self.pickerView selectRow:minute inComponent:4 animated:NO];

            

            [self pickerView:self.pickerView didSelectRow:year-startYear inComponent:0];

            [self pickerView:self.pickerView didSelectRow:month-1 inComponent:1];

            [self pickerView:self.pickerView didSelectRow:day-1 inComponent:2];

            [self pickerView:self.pickerView didSelectRow:hour inComponent:3];

            [self pickerView:self.pickerView didSelectRow:minute inComponent:4];

        }

            break;

        case 5:

        {

            [self.pickerView selectRow:year-startYear inComponent:0 animated:NO];

            [self.pickerView selectRow:month-1 inComponent:1 animated:NO];

            [self.pickerView selectRow:day-1 inComponent:2 animated:NO];

            [self.pickerView selectRow:hour inComponent:3 animated:NO];

            [self.pickerView selectRow:minute inComponent:4 animated:NO];

            [self.pickerView selectRow:second inComponent:5 animated:NO];

 

            

            [self pickerView:self.pickerView didSelectRow:year-startYear inComponent:0];

            [self pickerView:self.pickerView didSelectRow:month-1 inComponent:1];

            [self pickerView:self.pickerView didSelectRow:day-1 inComponent:2];

            [self pickerView:self.pickerView didSelectRow:hour inComponent:3];

            [self pickerView:self.pickerView didSelectRow:minute inComponent:4];

            [self pickerView:self.pickerView didSelectRow:second inComponent:5];

 

        }

            break;

        case 6:

        {

            [self.pickerView selectRow:hour inComponent:0 animated:NO];

            [self.pickerView selectRow:minute inComponent:1 animated:NO];

            

            [self pickerView:self.pickerView didSelectRow:hour inComponent:0];

            [self pickerView:self.pickerView didSelectRow:minute inComponent:1];

        }

            break;

        case 7:

        {

            [self.pickerView selectRow:hour inComponent:0 animated:NO];

            [self.pickerView selectRow:minute inComponent:1 animated:NO];

            [self.pickerView selectRow:second inComponent:2 animated:NO];

            

            [self pickerView:self.pickerView didSelectRow:hour inComponent:0];

            [self pickerView:self.pickerView didSelectRow:minute inComponent:1];

            [self pickerView:self.pickerView didSelectRow:second inComponent:2];

        }

            break;

        case 8:

        {

            [self.pickerView selectRow:minute inComponent:0 animated:NO];

            [self.pickerView selectRow:second inComponent:1 animated:NO];

            

            [self pickerView:self.pickerView didSelectRow:minute inComponent:0];

            [self pickerView:self.pickerView didSelectRow:second inComponent:1];

        }

            break;

            

        default:

            break;

    }

    

    [self.pickerView reloadAllComponents];

}

 

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

{

    UILabel*label = [[UILabel alloc]initWithFrame:CGRectMake(ScreenWith*component/6.0, 0,ScreenWith/6.0, 30)];

    label.font = [UIFont systemFontOfSize:15.0];

    label.tag = component*100+row;

    label.textAlignment = NSTextAlignmentCenter;

    

    

    switch (self.pickerViewMode) {

        case 0:

        {

            switch (component) {

                case 0:

                {

                    label.text = [NSString stringWithFormat:@"%ld年",(long)(startYear + row)];

                }

                    break;

                    

                default:

                    break;

            }

            

        }

            break;

        case 1:

        {

            switch (component) {

                case 0:

                {

                    label.text=[NSString stringWithFormat:@"%ld年",(long)(startYear + row)];

                }

                    break;

                case 1:

                {

                    label.text=[NSString stringWithFormat:@"%ld月",(long)row+1];

                }

                    break;

                    

                default:

                    break;

            }

        }

            break;

        case 2:

        {

            switch (component) {

                case 0:

                {

                    label.text=[NSString stringWithFormat:@"%ld年",(long)(startYear + row)];

                }

                    break;

                case 1:

                {

                    label.text=[NSString stringWithFormat:@"%ld月",(long)row+1];

                }

                    break;

                case 2:

                {

                    

                    label.text=[NSString stringWithFormat:@"%ld日",(long)row+1];

                }

                    break;

                    

                default:

                    break;

            }

        }

            break;

        case 3:

        {

            switch (component) {

                case 0:

                {

                    label.text=[NSString stringWithFormat:@"%ld年",(long)(startYear + row)];

                }

                    break;

                case 1:

                {

                    label.text=[NSString stringWithFormat:@"%ld月",(long)row+1];

                }

                    break;

                case 2:

                {

                    

                    label.text=[NSString stringWithFormat:@"%ld日",(long)row+1];

                }

                    break;

                case 3:

                {

                    label.text=[NSString stringWithFormat:@"%ld時",(long)row];

                }

                    break;

                    

                default:

                    break;

            }

            label.textAlignment=NSTextAlignmentCenter;

 

        }

            break;

        case 4:

        {

            switch (component) {

                case 0:

                {

                    label.text=[NSString stringWithFormat:@"%ld年",(long)(startYear + row)];

                }

                    break;

                case 1:

                {

                    label.text=[NSString stringWithFormat:@"%ld月",(long)row+1];

                }

                    break;

                case 2:

                {

                    

                    label.text=[NSString stringWithFormat:@"%ld日",(long)row+1];

                }

                    break;

                case 3:

                {

                    label.text=[NSString stringWithFormat:@"%ld時",(long)row];

                }

                    break;

                case 4:

                {

                    label.text=[NSString stringWithFormat:@"%ld分",(long)row];

                }

                    break;

                    

                default:

                    break;

            }

            label.textAlignment=NSTextAlignmentCenter;

 

        }

            break;

        case 5:

        {

            switch (component) {

                case 0:

                {

                    label.text=[NSString stringWithFormat:@"%ld年",(long)(startYear + row)];

                }

                    break;

                case 1:

                {

                    label.text=[NSString stringWithFormat:@"%ld月",(long)row+1];

                }

                    break;

                case 2:

                {

                    

                    label.text=[NSString stringWithFormat:@"%ld日",(long)row+1];

                }

                    break;

                case 3:

                {

                    label.text=[NSString stringWithFormat:@"%ld時",(long)row];

                }

                    break;

                case 4:

                {

                    label.text=[NSString stringWithFormat:@"%ld分",(long)row];

                }

                    break;

                case 5:

                {

                    label.text=[NSString stringWithFormat:@"%ld秒",(long)row];

                }

                    break;

                    

                default:

                    break;

            }

            label.textAlignment=NSTextAlignmentCenter;

            

        }

            break;

        case 6:

        {

            switch (component) {

                case 0:

                {

                    label.textAlignment=NSTextAlignmentLeft;

                    label.text=[NSString stringWithFormat:@"%ld時",(long)row];

                }

                    break;

                case 1:

                {

                    label.textAlignment=NSTextAlignmentRight;

                    label.text=[NSString stringWithFormat:@"%ld分",(long)row];

                }

                    break;

                    

                default:

                    break;

            }

        }

            break;

        case 7:

        {

            switch (component) {

                case 0:

                {

                    label.textAlignment=NSTextAlignmentLeft;

                    label.text=[NSString stringWithFormat:@"%ld時",(long)row];

                }

                    break;

                case 1:

                {

                    label.textAlignment=NSTextAlignmentCenter;

                    label.text=[NSString stringWithFormat:@"%ld分",(long)row];

                }

                    break;

                case 2:

                {

                    label.textAlignment=NSTextAlignmentRight;

                    label.text=[NSString stringWithFormat:@"%ld秒",(long)row];

                }

                    break;

                    

                default:

                    break;

            }

        }

            break;

        case 8:

        {

            switch (component) {

                case 0:

                {

                    label.textAlignment=NSTextAlignmentLeft;

                    label.text=[NSString stringWithFormat:@"%ld分",(long)row];

                }

                    break;

                case 1:

                {

                    label.textAlignment=NSTextAlignmentRight;

                    label.text=[NSString stringWithFormat:@"%ld秒",(long)row];

                }

                    break;

                    

                default:

                    break;

            }

        }

            break;

            

        default:

            break;

    }

    

    return label;

}

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

    return ([UIScreen mainScreen].bounds.size.width-40)/[self.columnArray[self.pickerViewMode] integerValue];

}

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

    return 30;

}

 

// 監聽picker的滑動

- (void)pickerView:(UIPickerView *)pickerView

      didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

    

    

    switch (self.pickerViewMode) {

        case 0:

        {

            switch (component) {

                case 0:

                {

                    selectedYear = startYear + row;

                    dayRange=[self isAllDay:selectedYear andMonth:selectedMonth];

                }

                    break;

                    

                default:

                    break;

            }

            

            _string =[NSString stringWithFormat:@"%ld",

                      (long)selectedYear];

        }

            break;

        case 1:

        {

            switch (component) {

                case 0:

                {

                    selectedYear=startYear + row;

                    dayRange=[self isAllDay:selectedYear andMonth:selectedMonth];

                }

                    break;

                case 1:

                {

                    selectedMonth=row+1;

                    dayRange=[self isAllDay:selectedYear andMonth:selectedMonth];

                }

                    break;

                    

                default:

                    break;

            }

            

            _string =[NSString stringWithFormat:@"%ld-%.2ld",

                      (long)selectedYear,

                      selectedMonth];

        }

            break;

        case 2:

        {

            switch (component) {

                case 0:

                {

                    selectedYear=startYear + row;

                    dayRange=[self isAllDay:selectedYear andMonth:selectedMonth];

                }

                    break;

                case 1:

                {

                    selectedMonth=row+1;

                    dayRange=[self isAllDay:selectedYear andMonth:selectedMonth];

                }

                    break;

                case 2:

                {

                    selectedDay=row+1;

                }

                    break;

                    

                default:

                    break;

            }

            

            _string =[NSString stringWithFormat:@"%ld-%.2ld-%.2ld",

                      selectedYear,

                      selectedMonth,

                      (long)selectedDay];

        }

            break;

        case 3:

        {

            switch (component) {

                case 0:

                {

                    selectedYear=startYear + row;

                    dayRange=[self isAllDay:selectedYear andMonth:selectedMonth];

                }

                    break;

                case 1:

                {

                    selectedMonth=row+1;

                    dayRange=[self isAllDay:selectedYear andMonth:selectedMonth];

                }

                    break;

                case 2:

                {

                    selectedDay=row+1;

                }

                    break;

                case 3:

                {

                    selectedHour=row;

                }

                    break;

                    

                default:

                    break;

            }

            

            _string =[NSString stringWithFormat:@"%ld-%.2ld-%.2ld %.2ld",

                      selectedYear,

                      selectedMonth,

                      selectedDay,

                      (long)selectedHour];

        }

            break;

        case 4:

        {

            switch (component) {

                case 0:

                {

                    selectedYear=startYear + row;

                    dayRange=[self isAllDay:selectedYear andMonth:selectedMonth];

                }

                    break;

                case 1:

                {

                    selectedMonth=row+1;

                    dayRange=[self isAllDay:selectedYear andMonth:selectedMonth];

                }

                    break;

                case 2:

                {

                    selectedDay=row+1;

                }

                    break;

                case 3:

                {

                    selectedHour=row;

                }

                    break;

                case 4:

                {

                    selectedMinute=row;

                }

                    break;

                    

                default:

                    break;

            }

            

            _string =[NSString stringWithFormat:@"%ld-%.2ld-%.2ld %.2ld:%.2ld",

                      selectedYear,

                      selectedMonth,

                      selectedDay,

                      selectedHour,

                      (long)selectedMinute];

        }

            break;

        case 5:

        {

            switch (component) {

                case 0:

                {

                    selectedYear=startYear + row;

                    dayRange=[self isAllDay:selectedYear andMonth:selectedMonth];

                }

                    break;

                case 1:

                {

                    selectedMonth=row+1;

                    dayRange=[self isAllDay:selectedYear andMonth:selectedMonth];

                }

                    break;

                case 2:

                {

                    selectedDay=row+1;

                }

                    break;

                case 3:

                {

                    selectedHour=row;

                }

                    break;

                case 4:

                {

                    selectedMinute=row;

                }

                    break;

                case 5:

                {

                    selectedSecond=row;

                }

                    break;

                    

                default:

                    break;

            }

            

            _string =[NSString stringWithFormat:@"%ld-%.2ld-%.2ld %.2ld:%.2ld:%.2ld",

                      selectedYear,

                      selectedMonth,

                      selectedDay,

                      selectedHour,

                      (long)selectedMinute,

                      (long)selectedSecond];

        }

            break;

        case 6:

        {

            switch (component) {

                case 0:

                {

                    selectedHour=row;

                }

                    break;

                case 1:

                {

                    selectedMinute=row;

                }

                    break;

                    

                default:

                    break;

            }

            

            _string = [NSString stringWithFormat:@"%.2ld:%.2ld",(long)selectedHour,selectedMinute];

        }

            break;

        case 7:

        {

            switch (component) {

                case 0:

                {

                    selectedHour=row;

                }

                    break;

                case 1:

                {

                    selectedMinute=row;

                }

                    break;

                case 2:

                {

                    selectedSecond=row;

                }

                    break;

                    

                default:

                    break;

            }

            

            _string = [NSString stringWithFormat:@"%.2ld:%.2ld %.2ld",

                       selectedHour,

                       selectedMinute,

                       (long)selectedSecond];

        }

            break;

        case 8:

        {

            switch (component) {

                case 0:

                {

                    selectedMinute=row;

                }

                    break;

                case 1:

                {

                    selectedSecond=row;

                }

                    break;

                    

                default:

                    break;

            }

            

            _string = [NSString stringWithFormat:@"%.2ld %.2ld",

                       selectedMinute,

                       (long)selectedSecond];

        }

            break;

            

        default:

            break;

    }

}

#pragma mark - show and hidden

- (void)showDateTimePickerView{

    [self setCurrentDate:[NSDate date]];

    self.frame = CGRectMake(0, 0, ScreenWith, ScreenHeight);

    [UIView animateWithDuration:0.25f animations:^{

        self.alpha = 1;

        self.contentView.frame = CGRectMake(0, ScreenHeight-220, ScreenWith, 220);

        

    } completion:^(BOOL finished) {

        

    }];

}

- (void)hideDateTimePickerView{

    

    [UIView animateWithDuration:0.2f animations:^{

        self.alpha = 0;

        self.contentView.frame = CGRectMake(0, ScreenHeight, ScreenWith, 220);

    } completion:^(BOOL finished) {

        self.frame = CGRectMake(0, ScreenHeight, ScreenWith, ScreenHeight);

    }];

    

}

#pragma mark - private Function

//取消的隱藏

- (void)cancelButtonClick

{

    if (self.delegate != nil && [self.delegate respondsToSelector:@selector(didClickCancelDateTimePickerView)]) {

        [self.delegate didClickCancelDateTimePickerView];

    }

    

    [self hideDateTimePickerView];

    

}

 

//確認的隱藏

-(void)configButtonClick

{

    

    if (self.delegate != nil && [self.delegate respondsToSelector:@selector(didClickFinishDateTimePickerView:)]) {

        [self.delegate didClickFinishDateTimePickerView:_string];

    }

    

    [self hideDateTimePickerView];

}

 

-(NSInteger)isAllDay:(NSInteger)year andMonth:(NSInteger)month

{

    int day=0;

    switch(month)

    {

        case 1:

        case 3:

        case 5:

        case 7:

        case 8:

        case 10:

        case 12:

            day=31;

            break;

        case 4:

        case 6:

        case 9:

        case 11:

            day=30;

            break;

        case 2:

        {

            if(((year%4==0)&&(year%100!=0))||(year%400==0))

            {

                day=29;

                break;

            }

            else

            {

                day=28;

                break;

            }

        }

        default:

            break;

    }

    return day;

}

 

 

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

    [self hideDateTimePickerView];

}

@end

 

3.最終調用

//TODO:開始時間

- (IBAction)startClick:(UIButton *)sender {

    

    self.currenttag=0;

    SPDateTimePickerView *pickerView = [[SPDateTimePickerView alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width,  [UIScreen mainScreen].bounds.size.height)];

    pickerView.pickerViewMode = 5;

    pickerView.delegate = self;

    pickerView.title = @"時間選擇器";

    [self.view addSubview:pickerView];

    [pickerView showDateTimePickerView];

}

 

//選擇時間后的回調

#pragma mark - SPDateTimePickerViewDelegate

- (void)didClickFinishDateTimePickerView:(NSString *)date {

 

    NSLog(@"%@",date);

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM