【问题标题】:Setting the minimum and maximum date for a UIDatepicker which is put inside a Action sheet为放置在操作表中的 UIDatepicker 设置最小和最大日期
【发布时间】:2013-09-17 08:19:23
【问题描述】:

我正在使用这个类来显示名为 Action sheet picker 的日期选择器, 我遇到的问题是我无法设置选择器的最大和最小日期。

我使用的代码是这样的:

在tableview的didSelectRow方法中:

  else if (indexPath.row == 2){
        // here I am using a library which successfully shows a date picker from where we can pick the dates on which we want to request the appt.
        _actionSheetPicker = [[ActionSheetDatePicker alloc] initWithTitle:@"" 
      datePickerMode:UIDatePickerModeTime selectedDate:self.selectedDateandTime 
   target:self action:@selector(dateWasSelected:element:) origin:[self.tableView
  cellForRowAtIndexPath:indexPath]];
        [self.actionSheetPicker addCustomButtonWithTitle:[self.selectedDateandTime 
      getDateStringInFormat:@"dd MMM yyyy"] value:Nil];
        UIDatePicker * picker = (UIDatePicker *)[self.actionSheetPicker 
     configuredPickerView];
        [picker setMinimumDate:self.selectedDateandTime];

        self.actionSheetPicker.hideCancel = NO;
        [self.actionSheetPicker showActionSheetPicker];
}

configuredPickerView 方法在库中,如下:

- (UIView *)configuredPickerView {
CGRect datePickerFrame = CGRectMake(0, 40, self.viewSize.width, 216);
UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:datePickerFrame];
datePicker.datePickerMode = self.datePickerMode;
[datePicker setDate:self.selectedDate animated:NO];


[datePicker addTarget:self action:@selector(eventForDatePicker:) forControlEvents:UIControlEventValueChanged];

//need to keep a reference to the picker so we can clear the DataSource / Delegate when dismissing (not used in this picker, but just in case somebody uses this as a template for another picker)
self.pickerView = datePicker;

return datePicker;

}

如果有人可以帮助我解决这个问题,请。如果需要任何额外的帮助来理解课程的架构,请随时问我。

【问题讨论】:

  • 为什么你不使用简单的方法来设置选择器的最大和最小日期?
  • 你能建议我如何做到这一点以及它将如何与 actionsheetpicker 库兼容

标签: ios uidatepicker uiactionsheet


【解决方案1】:

我也遇到了同样的问题,所以我在ActionSheetPicker-3.0写了一个方法

将此添加到您的 ActionSheetPicker-3.0 库中。

// ActionSheetDatePicker.h
+ (id)showPickerWithTitle:(NSString *)title datePickerMode:(UIDatePickerMode)datePickerMode selectedDate:(NSDate *)selectedDate minimumDate:(NSDate *)minimumDate maximumDate:(NSDate *)maximumDate target:(id)target action:(SEL)action origin:(id)origin;


// ActionSheetDatePicker.m
+ (id)showPickerWithTitle:(NSString *)title datePickerMode:(UIDatePickerMode)datePickerMode selectedDate:(NSDate *)selectedDate minimumDate:(NSDate *)minimumDate maximumDate:(NSDate *)maximumDate target:(id)target action:(SEL)action origin:(id)origin;
{
    ActionSheetDatePicker *picker = [[ActionSheetDatePicker alloc] initWithTitle:title datePickerMode:datePickerMode selectedDate:selectedDate target:target action:action origin:origin];
    picker.minimumDate = minimumDate;
    picker.maximumDate = maximumDate;
    [picker showActionSheetPicker];
    return picker;
}

在你想使用 ActionSheetDatePicker 的地方写下这段代码

    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *maximumDateComponents = [calendar components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]];
    [maximumDateComponents setYear:2050];
    NSDate *minDate = [NSDate date];
    NSDate *maxDate = [calendar dateFromComponents:maximumDateComponents];


[ActionSheetDatePicker showPickerWithTitle:@"Select Start Date" datePickerMode:UIDatePickerModeDate selectedDate:[NSDate date] minimumDate:minDate maximumDate:maxDate target:self action:@selector(dateSelected:element:) origin:sender];

【讨论】:

    【解决方案2】:

    您可以使用 UIDatePicker 属性:-

    @property (nonatomic, retain) NSDate *minimumDate; // 
    @property (nonatomic, retain) NSDate *maximumDate; // default is nil
    

    【讨论】:

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