Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIDatePicker设置最小和最大时间_Ios_Uidatepicker - Fatal编程技术网

Ios UIDatePicker设置最小和最大时间

Ios UIDatePicker设置最小和最大时间,ios,uidatepicker,Ios,Uidatepicker,我有一个只包含时间的UIDatePicker,我需要设置显示的最小和最大小时数。例如,我需要它在6小时开始,15小时结束。是否可以使用UIDatePicker执行此操作?只需使用以下命令: datePicker.maximumDate = myMaxDate; datePicker. minimumDate = myMinDate; 当myMaxDate和myMinDate是NSDate对象时至于我的问题,maximumDate和minimumDate的答案不是我想要的。也许我的解决方案不是那

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

只需使用以下命令:

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

当myMaxDate和myMinDate是
NSDate
对象时

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

@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;
}
@interface CHMinutesPickerDelegate()
@属性(非原子,强)NSArray*分钟数组;
@结束
@实现CHMinutesPickerDelegate
-(NSInteger)pickerView:(UIPickerView*)pickerView行数组件:(NSInteger)组件{
返回[self.minutesArray count];
}
-(NSInteger)pickerView中组件的编号:(UIPickerView*)pickerView{
返回1;
}
-(NSString*)pickerView:(UIPickerView*)pickerView标题箭头:(NSInteger)组件行:(NSInteger)组件{
返回[self.minutesArray objectAtIndex:row];
}
-(NSArray*)分钟数组{
如果(!\u分钟数组){
NSMutableArray*temporaryMinutesArray=[NSMutableArray];
对于(int i=0;i<6;i++){
对于(int j=0;j<2;j++){
[temporaryMinutesArray addObject:[NSString stringWithFormat:@“%i%i”,i,j*5];
}
}
_分钟数组=时间分钟数组;
}
返回_分钟数组;
}
minutesArray
返回以下数组:{“05”,“10”…etc}。这是一个自定义分钟选择器的示例,您可以为小时或其他时间编写相同的内容,选择自己的最大值和最小值。这对我来说很好。

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)
}

就是这样:)

但是最难的部分是为
myMaxDate
myMinDate
找到合适的值,所以时间范围会执行所需的操作。不幸的是,如果UIDatePicker设置为UIDatePickerModeCountDownTimer(Obj-C)或UIDatePicker.Mode.countDownTimer(Swift),这不适用。这不符合预期。在时间模式下,DatePicker仍将允许您选择超过日期的时间。min。当使用UIDatePicker作为倒计时时,恐怕没有正式的方法来实现这一点。但是,您可以将UIPickerView子类化—看看这个问题: