0

カレンダーでいくつかのイベントを予約するための uidatepicker を設定しようとしていました。UIDatePicker で特定の日付を無効にする (非表示にする) 必要があります。たとえば、外出中や休暇中などです。

これを手伝ってくれませんか?よろしくお願いします。ここにいくつかのコードがあります:

 - (void)viewDidLoad
 {


     NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"IT"];
     [self.datePicker setLocale:locale];

     NSString *min = @"20132015";
     NSString *max = @"22132015";

     NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
     [dateFormat setDateFormat:@"ddMMyyyy HH:mm"];
     NSDate *datemin = [dateFormat dateFromString:min];
     NSDate *datemax = [dateFormat dateFromString:max];
[self.view addSubview:datePicker];
datePicker.minuteInterval = 15;
datePicker.maximumDate = datemax;
datePicker.minimumDate = [NSDate date];

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

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


[super viewDidLoad];
// Do any additional setup after loading the view.
 }

 -(void)disableDate{

NSDate *pickedDate = datePicker.date;  // Get current Date
NSDate *disabledDate = [?????;
if([pickedDate compare:disabledDate] == NSOrderedSame)
{
    [datePicker setDate:disabledDate animated:YES];

}
 }
      -(void)getDisableDate
 {
?????
 }


 - (void)LabelChange:(id)sender{


     NSDateFormatter *df = [[NSDateFormatter alloc] init];
     [df setDateFormat:@"dd.MM.yyyy HH:mm"];
     NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"IT"];
     [self.datePicker setLocale:locale];

     labelDate.text = [NSString stringWithFormat:@"%@",
                    [df stringFromDate:datePicker.date]];

     NSLog(@"date:%@", datePicker.date);


 }
4

2 に答える 2

0

UIDatePicker は、日付の範囲をサポートしていません。setDate:animated:代わりに、選択可能な最も近い日付を使用して、悪い日付が選択されるたびに日付を変更します。また、選択した日付が変更された理由を説明するメッセージをどこかに表示します。

それか、UIPickerView を使用して独自のカスタム UIDatePicker を記述します。難しくないですよね、以前やったことがあります。最悪の部分は、ラッピング値の処理です (例: 31 -> 1)。ただし、より多くの作業が必要です。

于 2013-04-08T21:55:29.430 に答える