Как заблокировать дни в UIDatePicker для iOS
Я использую средство выбора дат в своем приложении для IOS, и я хочу знать, можно ли заблокировать несколько дней. Например, мне нужно заблокировать все понедельники в году, возможно ли это?
Спасибо.
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]; } }