【问题标题】:How to set specific time & minutes to datepicker?如何为日期选择器设置特定的时间和分钟?
【发布时间】:2015-06-25 07:09:31
【问题描述】:

我想根据当前时间和日期选择器时间设置具体时间。

如果用户选择下午 3:01,它会直接转到下午 3:30, 下午 3 点 20 分,然后是下午 3 点 45 分, 下午 3:35,然后是下午 4:00。 如果是下午 5:00,那么是下午 5:15。

因此用户将根据 3:00,3:15,3:30,3:45,4:00 等获得时间选项...

我已经实现了这一点,当我去下午 6:01 或将来的任何时间时,它都可以正常工作,除非我无法切换回下午 5:01(而当前时间是下午 3:00)

这个问题有什么解决办法或可能性吗?

试试下面的代码。

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.datePicker addTarget:self action:@selector(datechanged) forControlEvents:UIControlEventValueChanged];

}



 NSDate *date = [self.datePicker date];

    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *components = [calendar components:(NSMinuteCalendarUnit | NSHourCalendarUnit |NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:date];
    NSInteger minute = [components minute];
    NSInteger hour = [components hour];

if ([components minute] == 0)
    {

        [components setMinute:15];
    }
    else
    {
        NSInteger result =  (minute / 15);

        if (result == 0)
        {
            [components setMinute:30];
        }
        else if(result == 2  || result == 1)
        {
            [components setMinute:45];
        }
        else if (result == 3)
        {
            [components setMinute:60];
        }
    }


    NSDate *newDate = [calendar dateFromComponents: components];

    [self.datePicker setMinimumDate:newDate];
    [self.datePicker reloadInputViews];

【问题讨论】:

  • 您的具体问题是什么??
  • 假设现在是下午 4 点,我选择下午 6:01 的时间,然后它会转到下午 6:30,这很好,但如果我将它切换回下午 5:01,它应该会转到下午 5:30但是 UIControlEventValueChanged 是在更改后调用的,而不是在更改后调用,因此 UIDatePicker 将其视为下午 7:01 而不是下午 5:01。试试这段代码你会明白我在说什么。
  • 您正在设置 ` [self.datePicker setMinimumDate:newDate];` 这就是为什么它不允许您将时间设置回 ` 5:01 PM`

标签: ios uidatepicker nsdatecomponents


【解决方案1】:

您可以像这样设置日期更改方法,允许用户设置日期。

- (IBAction)datechanged:(UIDatePicker *)sender {
NSDate *date = [self.datePicker date];

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSCalendarUnitMinute | NSCalendarUnitHour |NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear) fromDate:date];

NSInteger minute = [components minute];
NSInteger hour = [components hour];
NSLog(@"%li",(long)hour);

if ([components minute] == 0)
{

    [components setMinute:15];
}
else
{
    NSInteger result =  (minute / 15);

    if (result == 0)
    {
        [components setMinute:30];
    }
    else if(result == 2  || result == 1)
    {
        [components setMinute:45];
    }
    else if (result == 3)
    {
        [components setMinute:60];
    }
}

NSDate *newDate = [calendar dateFromComponents: components];
NSLog(@"%@",newDate);
//[self.datePicker setMinimumDate:newDate];
[self.datePicker setDate:newDate];
[self.datePicker reloadInputViews];
}

更新 1

您可以在viewDidLoad 方法中设置最小日期(意味着不允许过去的时间)。

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.datePicker addTarget:self action:@selector(datechanged) forControlEvents:UIControlEventValueChanged];
    [self.datePicker setMinimumDate:[NSDate date]];

} 

这对你有帮助,

HTH,享受编码!

【讨论】:

  • 是的,感谢您的帮助,但我仍然不想让当前时间过去的时间不适用于此...
猜你喜欢
  • 2021-06-06
  • 2022-01-20
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 2016-01-29
  • 2011-08-14
  • 1970-01-01
  • 2019-04-12
相关资源
最近更新 更多