2013-09-02 19 views
9

Mam UIDatePicker z minimalnej do maksymalnej terminach. Zastanawiam się, czy istnieje sposób na ukrycie wierszy kolumn dla dat/godzin, które są albo przed moją minimalną datą, albo po mojej maksymalnej dacie. Teraz selektor wyświetla się każdego dnia, ale tylko bieżący tydzień jest dostępny do wyboru (pogrubiony), a chciałbym, aby numery poza zakresem danego tygodnia zostały ukryte. czy można to zrobić za pomocą UIDatePicker dostarczonej przez XCode, czy też musiałbym stworzyć własny próbnik od podstaw?usunąć/ukryć wiersze poza minimalnym/maksymalnym zakresem dat UIDatePicker?

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.formatter = [NSDateFormatter new]; 
    [self.formatter setDateFormat:@"dd:hh:mm:ss"]; 

    NSDate *now = [NSDate date]; 

    picker.minimumDate = [NSDate date]; 
    picker.maximumDate = [now dateByAddingTimeInterval:604800]; 

    [picker setDate:now animated:YES]; 
    self.counterLabel.text = [now description]; 

    self.now = [NSDate date]; 
    self.counterLabel.text = [self.formatter stringFromDate:self.now]; 

} 
+0

Poszukuję również odpowiedzi. Znalazłeś coś ... proszę podziel się – Sudhir

Odpowiedz

2

Korzystanie z API minimumDate i maximumDate będzie zachowywać się jak już wyjaśniono - nadal wskazują daty, ale nie umożliwiają wybranie ich. Obecnie nie ma sposobu, aby ukryć te daty, które są poza podanym zakresem, jednak mam dla ciebie rozwiązanie.

Zamiast min i max pochodzi z UIDatePicker, można wygenerować tablicę wszystkich NSDate s, które chcesz pokazać użytkownikowi, i użyć UIPickerView przedstawić je do użytkownika. Zrobiłem dokładnie to dla jednej z moich własnych aplikacji.

self.datePicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 162)]; 
self.datePicker.dataSource = self; 
self.datePicker.delegate = self; 
//... 

#pragma mark - UIPickerView Data Source and Delegate 

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { 
    return 1; 
} 

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 
    return [self.availableDates count]; 
} 

- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component { 
    return 28; 
} 

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view { 
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero]; 
    label.font = [UIFont systemFontOfSize:20]; 
    label.textColor = [UIColor blackColor]; 

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    dateFormatter.dateFormat = @"EEE, MMMM d"; 

    label.text = [dateFormatter stringFromDate:self.availableDates[row]]; 

    [label sizeToFit]; 

    return label; 
}