美文网首页自专题iOS技术专题iOS进阶指南
iOS开发自定义时间控件UIDatePicker

iOS开发自定义时间控件UIDatePicker

作者: Courage_SC | 来源:发表于2016-04-26 16:02 被阅读3602次

    SCTimePickerView.h

    #import <UIKit/UIKit.h>
    
    @interface SCTimePickerView : UIView
    @property(nonatomic, strong)UIButton *confirmBtn;
    @property(nonatomic, strong)UIButton *cancleBtn;
    @property(nonatomic, strong)UILabel *titleLabel;
    @property(nonatomic, strong)UIDatePicker *dataPicker;
    @end
    
    

    SCTimePickerView.m

    #import "SCTimePickerView.h"
    
    @implementation SCTimePickerView
    
    - (instancetype)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self) {
            [self createViews:frame];
        }
        return self;
    }
    
    - (void)createViews:(CGRect)frame
    {
        UIView *headView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, 50)];
        headView.backgroundColor = [UIColor colorWithRed:0.95 green:0.95 blue:0.96 alpha:1];
        [self addSubview:headView];
        _cancleBtn = [UIButton buttonWithType:UIButtonTypeSystem];
        _cancleBtn.frame = CGRectMake(10, 0, 50, headView.frame.size.height);
        [_cancleBtn setTitle:@"取消" forState:UIControlStateNormal];
        [headView addSubview:_cancleBtn];
        
        _titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(_cancleBtn.frame.origin.x + _cancleBtn.frame.size.width, _cancleBtn.frame.origin.y, frame.size.width - _cancleBtn.frame.size.width * 2 - _cancleBtn.frame.origin.x * 2, _cancleBtn.frame.size.height)];
        _titleLabel.textColor = [UIColor colorWithRed:0.13 green:0.38 blue:0.6 alpha:1];
        _titleLabel.textAlignment = 1;
        [self addSubview:_titleLabel];
        
        _confirmBtn = [UIButton buttonWithType:UIButtonTypeSystem];
        _confirmBtn.frame = CGRectMake(_titleLabel.frame.origin.x + _titleLabel.frame.size.width, _titleLabel.frame.origin.y, _cancleBtn.frame.size.width, _cancleBtn.frame.size.height);
        [_confirmBtn setTitle:@"确定" forState:UIControlStateNormal];
        [self addSubview:_confirmBtn];
        
        _dataPicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, _cancleBtn.frame.origin.y + _cancleBtn.frame.size.height, frame.size.width, frame.size.height - (_cancleBtn.frame.origin.y + _cancleBtn.frame.size.height))];
        _dataPicker.backgroundColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1];
       // _dataPicker.minuteInterval = 30;
        [_cancleBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        [_confirmBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        
        [self addSubview:_dataPicker];
    }
    @end
    
    

    使用自定义控件

    #import "SCTimePickerView.h"
    @property(nonatomic, strong)SCTimePickerView *timePickerView;
    
     ///自定义时间控件
        _timePickerView = [[SCTimePickerView alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height - 300 * FitWidth, self.view.frame.size.width, 300 * FitHeight)];
        [_timePickerView.dataPicker addTarget:self action:@selector(chooseDate:) forControlEvents:UIControlEventValueChanged];
        [self.view addSubview:_timePickerView];
        _timePickerView.hidden = YES;
        _timePickerView.dataPicker.datePickerMode = 1;
        // _timePickerView.dataPicker.minuteInterval = 30;
        
      //picker取消
        [_timePickerView.cancleBtn addTarget:self action:@selector(cancleAction) forControlEvents:UIControlEventTouchUpInside];
        //picker确定
        [_timePickerView.confirmBtn addTarget:self action:@selector(confirmAction) forControlEvents:UIControlEventTouchUpInside];
    
    #pragma mark 选择时间的按钮
    - (void)selectTimeAction:(UIButton *)sender{
        switch (sender.tag) {
            case 1003:
            {
                _timePickerView.hidden = NO;
                _flag = 1;
                NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
                [formatter setDateFormat:@"yyy-MM-dd"];
                NSDate *date = [NSDate date];
                NSString *dateTime = [formatter stringFromDate:date];
                _startTime = dateTime;
                NSIndexPath *indexPath = [NSIndexPath indexPathForRow:3 inSection:0];
                AddApplyLeaveTableViewCell *cell = [_tableView cellForRowAtIndexPath:indexPath];
                [cell.timeBtn setTitle:_startTime forState:UIControlStateNormal];
    
            }
                break;
            case 1004:
            {
                _timePickerView.hidden = NO;
                _flag = 2;
                NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
                [formatter setDateFormat:@"yyy-MM-dd"];
                NSDate *date = [NSDate date];
                NSString *dateTime = [formatter stringFromDate:date];
                _endTime = dateTime;
                NSIndexPath *indexPath = [NSIndexPath indexPathForRow:4 inSection:0];
                AddApplyLeaveTableViewCell *cell = [_tableView cellForRowAtIndexPath:indexPath];
                [cell.timeBtn setTitle:_endTime forState:UIControlStateNormal];
    
            }
                break;
            default:
                break;
        }
    }
    #pragma mark - pickerView 时间选择器的方法
    - (void)chooseDate:(UIDatePicker *)sender
    {
        NSDate *selectDate = sender.date;
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        formatter.dateFormat = @"yyyy-MM-dd";
        _dateString = [formatter stringFromDate:selectDate];
        switch (_flag) {
            case 1:
            {
                _startTime = _dateString;
                NSIndexPath *indexPath = [NSIndexPath indexPathForRow:3 inSection:0];
                AddApplyLeaveTableViewCell *cell = [_tableView cellForRowAtIndexPath:indexPath];
                 [cell.timeBtn setTitle:_dateString forState:UIControlStateNormal];
            }
                break;
            case 2:
            {
                _endTime = _dateString;
                NSIndexPath *indexPath = [NSIndexPath indexPathForRow:4 inSection:0];
                AddApplyLeaveTableViewCell *cell = [_tableView cellForRowAtIndexPath:indexPath];
                [cell.timeBtn setTitle:_dateString forState:UIControlStateNormal];
            }
                break;
            default:
                break;
        }
        
    }
    #pragma mark - 时间选择器的点击取消的方法
    - (void)cancleAction
    {
        _timePickerView.hidden = YES;
    }
    - (void)saveAction
    {
        _timePickerView.hidden = YES;
    }
    
    - (void)confirmAction{
        switch (_flag) {
            case 1:
            {
                _timePickerView.hidden = YES;
                NSIndexPath *indexPath = [NSIndexPath indexPathForRow:3 inSection:0];
                AddApplyLeaveTableViewCell *cell = [_tableView cellForRowAtIndexPath:indexPath];
                [cell.timeBtn setTitle:_dateString forState:UIControlStateNormal];
                
                if (_endTime) {
                    NSTimeInterval interval = 0.0;
                    NSDateFormatter * dateFormat = [[NSDateFormatter alloc] init];
                    NSString *startTime = [NSString stringWithFormat:@"%@ 00:00:00", _startTime];
                    [dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
                    NSDate *sdate = [dateFormat dateFromString:startTime];
                    NSTimeInterval sinterval = [sdate timeIntervalSinceNow];
                    NSString *endTime = [NSString stringWithFormat:@"%@ 00:00:00", _endTime];
                    NSDate *edate = [dateFormat dateFromString:endTime];
                    NSTimeInterval einterval = [edate timeIntervalSinceNow];
                    interval = einterval - sinterval;
                    _day = interval/60/60/24 + 2;
                    NSLog(@"%ld", _day);
                    if (_day > 0) {
                        _isNianJiaShow = 1;
                    }else{
                        _isNianJiaShow = 0;
                    }
                    [_tableView reloadData];
                
                }
                
            }
                break;
            case 2:
            {
                _timePickerView.hidden = YES;
                NSIndexPath *indexPath = [NSIndexPath indexPathForRow:4 inSection:0];
                AddApplyLeaveTableViewCell *cell = [_tableView cellForRowAtIndexPath:indexPath];
                [cell.timeBtn setTitle:_dateString forState:UIControlStateNormal];
                if (_startTime) {
                    
                    NSTimeInterval interval = 0.0;
                    NSDateFormatter * dateFormat = [[NSDateFormatter alloc] init];
                    [dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
                     NSString *startTime = [NSString stringWithFormat:@"%@ 00:00:00", _startTime];
                    NSDate *sdate = [dateFormat dateFromString:startTime];
                    NSTimeInterval sinterval = [sdate timeIntervalSinceNow];
                   
                    NSString *endTime = [NSString stringWithFormat:@"%@ 00:00:00", _endTime];
                    NSDate *edate = [dateFormat dateFromString:endTime];
                    NSTimeInterval einterval = [edate timeIntervalSinceNow];
                    interval = einterval - sinterval;
                    _day = interval/60/60/24 + 2;
                    if (_day > 0) {
                        _isNianJiaShow = 1;
                    }else{
                        _isNianJiaShow = 0;
                    }
                    [_tableView reloadData];
                        
                }
    
            }
                break;
            default:
                break;
        }
        
    }
    
    
    

    相关文章

      网友评论

      • 十年祤茉:求demo 谢谢1912902828@qq.com
      • 超_iOS:点击textfile弹出datapicker,这样的自定义datapicker添加确定取消,怎么搞啊?
        0x0F:@李二超 pick作为inputView,创建一个toolbar加上一个响应resignFirstResponder的按钮作为inputAccessoryView
        Courage_SC:@李二超 代码里写了确定 取消的按钮呀

      本文标题:iOS开发自定义时间控件UIDatePicker

      本文链接:https://www.haomeiwen.com/subject/jcnqrttx.html