iOS通过pickerView自定义简单的时间选择器

/** 初始化pickerView */
-(void)initPickerView
{
    int  x_hour  = 50;
    int  height_hour  = 120;
    int  toolBar_height = 40;
    float width_hour = MainScreen_Width/2 - x_hour;
    float y_hour = MainScreen_Height/2 - height_hour - toolBar_height;

    self.hourPickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(x_hour, y_hour, width_hour, height_hour)];
    self.hourPickerView.dataSource = self;
    self.hourPickerView.delegate = self;
    self.hourPickerView.backgroundColor = [UIColor whiteColor];
    [self addSubview:self.hourPickerView];

    self.minutesPickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(x_hour+width_hour, y_hour, width_hour, height_hour)];
    self.minutesPickerView.dataSource = self;
    self.minutesPickerView.delegate = self;
    self.minutesPickerView.backgroundColor = [UIColor whiteColor];
    [self addSubview:self.minutesPickerView];
    
    UIView *toolBarView = [[UIView alloc] initWithFrame:CGRectMake(x_hour,self.hourPickerView.frame.size.height+self.hourPickerView.frame.origin.y, 2*width_hour, toolBar_height)];
   // toolBarView.backgroundColor = [UIColor orangeColor];
    [self addSubview:toolBarView];
    
    NSArray *btnTitleArr = [NSArray arrayWithObjects:@"取消",@"确定", nil];
    
    for(int i=0; i < [btnTitleArr count]; i++)
    {
        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
        btn.frame = CGRectMake(i*toolBarView.frame.size.width/2,0, toolBarView.frame.size.width/2, toolBarView.frame.size.height);
        [btn setTitle:btnTitleArr[i] forState:UIControlStateNormal];
        [btn setBackgroundColor:[UIColor orangeColor]];
        [btn addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside];
        btn.tag = 100+i;
        [toolBarView addSubview:btn];
        if(i == 1)
        {
            UIView *lineView = [[UIView alloc] initWithFrame:CGRectMake(btn.frame.origin.x,btn.frame.origin.y, 0.5, btn.frame.size.height)];
            lineView.backgroundColor = [UIColor grayColor];
            [toolBarView addSubview:lineView];
        }
    }
    
    //设置默认选择当前时间
    [self.hourPickerView selectRow:currentHour inComponent:0 animated:YES];
    [self.minutesPickerView selectRow:3 inComponent:0 animated:YES];
}

/** 初始化数据源 */
-(void)_setArr
{
    hourArr = [NSMutableArray array];
    mintuesArr = [NSMutableArray array];
    
    currentHour = [[NSDate date] getHour];
    timeSelect = [NSString stringWithFormat:@"%02d:%02d",[[NSDate date] getHour],30];
    
    for(int i=0; i<24; i++)
    {
        [hourArr addObject:[NSString stringWithFormat:@"%d",i]];
    }
    for(int i=0; i<6; i++)
    {
        [mintuesArr addObject:[NSString stringWithFormat:@"%d",i*10]];
    }
}

-(void)btnAction:(UIButton *)sender
{
    switch (sender.tag) {
        case 100://取消
        {
            if(self.hidePickerView)
            {
                self.hidePickerView(sender.tag,@"");
                
            }
        }
            break;
        case 101://确定
        {
            if(self.hidePickerView)
            {
                self.hidePickerView(sender.tag,timeSelect);
            }
        }
            break;
        default:
            break;
    }
}

#pragma mark - UIPickerViewDataSource
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return 1;
}

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
   
    if(pickerView == self.hourPickerView)
    {
        return [hourArr count];
    }
    else
    {
        return [mintuesArr count];
    }
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    if(pickerView == self.hourPickerView)
    {
        selectHour = [NSString stringWithFormat:@"%02d",[hourArr[row] intValue]];
    }
    else if(pickerView == self.minutesPickerView)
    {
        selectMin = [NSString stringWithFormat:@"%02d",[mintuesArr[row] intValue]];
    }

    timeSelect = [NSString stringWithFormat:@"%@:%@",selectHour,selectMin];
}

#pragma makr - UIPickerViewDelegate
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)componen
{
    if(pickerView == self.hourPickerView)
    {
        return [hourArr objectAtIndex:row];
    }
    else
    {
        return [mintuesArr objectAtIndex:row];
    }
}

- (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated
{
    
}
 

使用方法:

 CustomDatePickView *datepickView = [[CustomDatePickView alloc] initWithFrame:self.view.bounds];
           
//通过block响应调用事件和接受选择的时间值
             __weak  CustomDatePickView *wDatePickerView = datepickView;
            datepickView.hidePickerView = ^(NSInteger senderTag,NSString *selectTime){
                switch (senderTag) {
                    case 100:
                    {
                        [wDatePickerView removeFromSuperview];
                    }
                        break;
                    case 101:
                    {
                        [wDatePickerView removeFromSuperview];
                        selectTimeStr = selectTime;
                        NSString *selectDate = @"";
                        for(UIButton *btn in self.storedBtnView.subviews)
                        {
                            if(btn.selected)
                            {
                                switch (btn.tag) {
                                    case 100://今天
                                    {
                                        selectDate = [NSString stringWithFormat:@"%d-%02d-%02d %@ %@",[dateDic[@"year"] intValue],[dateDic[@"month"] intValue],[dateDic[@"day"] intValue],[self _getWeakDay:btn],selectTime];
                                        
                                        [self updateBookingBtnUI:selectDate];
                                    }
                                        break;
                                    case 101://明天
                                    {
                                        selectDate = [NSString stringWithFormat:@"%d-%02d-%02d %@ %@",[dateDic[@"nextYear"] intValue],[dateDic[@"tomorrowMonth"] intValue],[dateDic[@"tomorrow"] intValue],[self _getWeakDay:btn],selectTime];
                                        [self updateBookingBtnUI:selectDate];
                                    }
                                        break;
                                    case 102://后天
                                    {
                                        selectDate = [NSString stringWithFormat:@"%d-%02d-%02d %@ %@",[dateDic[@"lastYear"] intValue],[dateDic[@"afterDayMonth"] intValue],[dateDic[@"afterDay"] intValue],[self _getWeakDay:btn],selectTime];
                                        [self updateBookingBtnUI:selectDate];
                                    }
                                        break;
                                    default:
                                        break;
                                }
                            }
                        }
                    }
                        break;
                    default:
                        break;
                }
            };
            [self.view addSubview:datepickView];


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值