2013-03-20 18 views
5

dziwne zachowanie w iOS 6.1 mam ustawić minimalną datę bieżącą datę mojego wyboru daty jak toDate Picker przewija do ostatniego terminu, mimo że minimalna data jest zestaw do bieżącej daty

NSDate *currentTime = [NSDate date]; 
[picker setMinimumDate:currentTime]; 

enter image description here

Ale kiedy uruchomię aplikację, mogę przewinąć do wcześniejszej daty, chociaż jej nie wybrano, selektor nie wróci do aktualnej daty. Dzieje się to tylko w wersji dla systemu iOS 6.1, a w trybie próbnym zachowuje się normalnie.

+0

Sprawdź moją zredagowaną odpowiedź .. – moosa0709

Odpowiedz

8

Mam ten sam problem jak ty i stałą go tylko ustawianie daty w maksymalnym terminie ręcznie (w tym przypadku ustawiam limit na bieżącą datę):

- (IBAction)pickerValueChanged:(id)sender { 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     UIDatePicker *datePicker = (UIDatePicker *)sender; 

     if ([self.datePicker.date compare:[NSDate date]] == NSOrderedDescending) { 

      datePicker.date = [NSDate date]; 
     } 

    }); 
} 

Ta funkcja jest wyzwalana, gdy wartość daty z selektora dat zmieniła się . tutaj możesz ustawić maksymalną lub minimalną wartość.

+0

Czy to jest pytanie lub odpowiedź? Jeśli masz pytanie, zadaj nowe pytanie http://stackoverflow.com/questions/ask – nhahtdh

+0

Odpowiedz z dodatkowym pytaniem;) –

+0

Usuń swoje pytanie "bonusowe" (nie dostaniesz odpowiedzi w ten sposób, a to zaśmieca rzeczywistą odpowiedź) - jeśli naprawdę chcesz, aby twoje pytanie było odpowiedzią, zadaj nowe pytanie. – nhahtdh

2

Musisz ustawić min i max daty takiego:

NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; 
NSDate *currentDate = [NSDate date]; 
NSDateComponents *comps = [[[NSDateComponents alloc] init] autorelease]; 

NSDate *minDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0]; 
[datePicker setMinimumDate:minDate]; 
+0

Jeszcze ten sam człowiek problem. Potrafi przewinąć do starych dat. –

2

Spróbuj to kod

NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; 
NSDate *currentDate = [NSDate date]; 
NSDateComponents *comps = [[[NSDateComponents alloc] init] autorelease]; 
[comps setYear:30]; 
NSDate *maxDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0]; 
[comps setYear:-30]; 
NSDate *minDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0]; 

[datePicker setMaximumDate:maxDate]; 
[datePicker setMinimumDate:minDate]; 
+0

Naprawdę dostajesz aktualną datę, taką jak Twoja odpowiedź Droga ..? –

+0

@Prem wypróbowałem Twoje rozwiązanie i to nie działa. Czy to błąd w iOS 6.1? –

+1

http://code4app.net/ios/Local-Notifier/4fb5e7c06803fa3a7f000000 Dostałem próbkę z tego linku. Powiedz mi, czy coś jest nie tak ... tak – moosa0709

1

Właściwość jest obiektem NSDate lub zerową (wartość domyślna), co oznacza brak daty maksymalnej. Ta właściwość wraz z właściwością minimalnaData pozwala określić poprawny zakres dat. Jeśli minimalna wartość daty jest większa niż maksymalna wartość daty, obie właściwości są ignorowane. Daty minimalne i maksymalne są również ignorowane w trybie odliczania (UIDatePickerModeCountDownTimer).

Spróbuj ustawić prawidłową datę minimalną i maksymalną. To działa dla mnie.