【问题标题】:UIDatePicker set minimum and maximum timeUIDatePicker 设置最小和最大时间
【发布时间】:2013-11-08 15:45:54
【问题描述】:

我有一个只有时间的UIDatePicker,我需要设置最小小时数和显示最大小时数的可能性。例如,我需要它在 6 小时开始并在 15 小时结束。是否可以使用UIDatePicker 执行此操作?

【问题讨论】:

  • 当使用 UIDatePicker 作为倒数计时器时,恐怕没有官方方法可以实现这一点。但是,您可以继承 UIPickerView - 看看这个问题:stackoverflow.com/questions/31023356/…

标签: ios uidatepicker


【解决方案1】:

1) 使用此函数检索最小和最大日期

func getTimeIntervalForDate()->(min : Date, max : Date){

let calendar = Calendar.current
var minDateComponent = calendar.dateComponents([.hour], from: Date())
minDateComponent.hour = 09 // Start time


let formatter = DateFormatter()
formatter.dateFormat = "h:mma"
let minDate = calendar.date(from: minDateComponent)
print(" min date : \(formatter.string(from: minDate!))")

var maxDateComponent = calendar.dateComponents([.hour], from: date)
maxDateComponent.hour = 17 //EndTime



let maxDate = calendar.date(from: maxDateComponent)
print(" max date : \(formatter.string(from: maxDate!))")



return (minDate!,maxDate!)
}

2) 将这些日期分配给您的pickerview

func createPickerView(textField : UITextField, pickerView : UIDatePicker){
    pickerView.datePickerMode = .time
    textField.delegate = self
    textField.inputView = pickerView
    let dates = getTimeIntervalForDate()

    pickerView.minimumDate = dates.min
    pickerView.maximumDate = dates.max
    pickerView.minuteInterval = 30
    pickerView.addTarget(self, action: #selector(self.datePickerValueChanged(_:)), for: UIControlEvents.valueChanged)
}

就是这样:)

【讨论】:

  • 这不能按预期工作。在时间模式下的 DatePicker 仍然可以让您选择过去 dates.min 的时间。
【解决方案2】:

就用这个吧:

datePicker.maximumDate = myMaxDate;
datePicker. minimumDate = myMinDate;

其中 myMaxDate 和 myMinDate 是 NSDate 对象

【讨论】:

  • 但困难的部分是为myMaxDate 和myMinDate 提供适当的值,因此时间范围可以满足需要。
  • 不幸的是,如果 UIDatePicker 设置为 UIDatePickerModeCountDownTimer (Obj-C) 或 UIDatePicker.Mode.countDownTimer (Swift),则这不适用。
【解决方案3】:

至于我的问题,maximumDate 和minimumDate 的答案不是我想要的。也许我的解决方案不是那么清晰和正确,但对我来说效果很好。 我已将UIDatePicker 更改为UIPickerView,为它写了一个单独的委托:

@interface CHMinutesPickerDelegate () <UIPickerViewDelegate, UIPickerViewDataSource>

@property (nonatomic, strong) NSArray *minutesArray;

@end

@implementation CHMinutesPickerDelegate

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:       (NSInteger)component {
    return [self.minutesArray count];
}

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    return 1;
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    return [self.minutesArray objectAtIndex: row];
}

- (NSArray *)minutesArray {
    if (!_minutesArray) {
        NSMutableArray *temporaryMinutesArray = [NSMutableArray array];
        for (int i = 0; i < 6; i++) {
            for (int j = 0; j < 2; j++) {
                [temporaryMinutesArray addObject: [NSString stringWithFormat: @"%i%i", i, j * 5]];
            }
        }
    _minutesArray = temporaryMinutesArray;
}
    return _minutesArray;
}

minutesArray 返回数组:{“05”、“10”...等}。这是自定义分钟选择器的示例,您可以为小时等编写相同的内容,选择您自己的最大值和最小值。这对我很有效。

【讨论】:

    猜你喜欢
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 2017-03-29
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多