Как заблокировать дни в UIDatePicker для iOS


Я использую средство выбора дат в своем приложении для IOS, и я хочу знать, можно ли заблокировать несколько дней. Например, мне нужно заблокировать все понедельники в году, возможно ли это?

Спасибо.

2 2

2 ответа:

Единственное, что вы можете сделать, это добавить пользовательский UIPickerView, как описано в комментариях, или реализовать метод, который вызывается для события UIControlEventValueChanged , как описано здесь

Затем проверьте новое значение для допустимого дня недели. вы можете получить будний день с помощью:

NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* components = [calendar components:NSWeekdayCalendarUnit fromDate:[NSDate date]];
return [components weekday]; // 1 = Sunday, 2 = Monday, ...

Невозможно спрятать несколько дней в колесе прокрутки.

Я должен был сделать что-то подобное и не мог найти способ удалить даты. Однако то, что я в конечном итоге сделал, было, если выбрана недопустимая дата, она отскочит в ближайший день, который был действительным, подобно тому, как управление обрабатывает, если вы устанавливаете минимальную дату и пытаетесь выбрать дату до этого.

-(void)init
{
    datePicker = [[UIDatePicker alloc] initWithFrame:CGRectZero];
    [datePicker setDatePickerMode:UIDatePickerModeDate];
    [datePicker setMinimumDate: [NSDate date]];
    [datePicker addTarget:self action:@selector(onDatePickerValueChanged:) forControlEvents:UIControlEventValueChanged];
}

-(void)onDatePickerValueChanged:(UIDatePicker *)picker
{
    // Work out which day of the week is currently selected.
    NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
    NSDateComponents *comps = [gregorian components:NSWeekdayCalendarUnit fromDate:picker.date];
    int weekday = [comps weekday];

    // Bounce Sundays (weekday=1) forward a day
    if (weekday == 1)
    {
        [datePicker setDate:[NSDate dateWithTimeInterval:60*60*24*1 sinceDate:picker.date] animated: true];
    }
    // Bounce Saturdays (weekday=7) back a day
    else if (weekday == 7)
    {
        [datePicker setDate:[NSDate dateWithTimeInterval:60*60*24*-1 sinceDate:picker.date] animated: true];
    }
}