2010-06-17 11 views

Odpowiedz

71

Nie testowane, ale prawdopodobnie chcesz coś takiego.

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDate *currentDate = [NSDate date]; 
NSDateComponents *comps = [[NSDateComponents alloc] init]; 
[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

Czy to nie zepsułoby się, jeśli masz również kolumnę dni i miesięcy? Ogranicza miesiące i dni do bieżącej daty, w jej obecnej formie. Jak dziś jest 3 czerwca 2015 roku. Lata będą w porządku. Dzień utknie przy maksymalnej wartości 3, a miesiąc utknie na maksimum czerwca – NSNoob

+0

Nie. Czy spekulujesz na ślepo? – warrenm

+0

Nie, próbowałem tego w aplikacji, nad którą pracuję, i stanąłem przed problemem, który ci powiedziałem. Koniec końców musiałem osobno wystawić czeki. – NSNoob

16
m_datePicker.maximumDate = [NSDate date]; 

Można użyć tego wiersza kodu, aby ustawić maksymalną datę (dzisiaj).

+0

i jak mogę ukryć datę> maximumDate? – alex

+0

Właściwie to ustawi maksymalną datę z dokładną minutą wykonania wiersza kodu. –

+0

Nie pozwala wybrać daty później niż dzisiaj, ale użytkownik widzi już późniejsze daty. –

1

Proszę spróbuj tego kodu systemów iOS 8 +

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 
NSDate *currentDate = [NSDate date]; 
NSDateComponents *comps = [[NSDateComponents alloc] init]; 
[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]; 
3

Adaptacja odpowiedź @ warrenm do SWIFT:

let currentDate = NSDate() 
let dateComponents = NSDateComponents() 
dateComponents.year = -13 
let minDate = calendar.dateByAddingComponents(dateComponents, toDate: currentDate, options: NSCalendarOptions(rawValue: 0)) 
dateComponents.year = 30 
let maxDate = calendar.dateByAddingComponents(dateComponents, toDate: currentDate, options: NSCalendarOptions(rawValue: 0)) 


dobPicker.maximumDate = maxDate 
dobPicker.minimumDate = minDate 
1

szukał w tej kwestii już dziś i pojawił się z roztworu w Swift 3, która rozciąga UIDatePicker.

extension UIDatePicker 
{ 
    /// set the date picker values and set min/max 
    /// - parameter date: Date to set the picker to 
    /// - parameter unit: (years, days, months, hours, minutes...) 
    /// - parameter deltaMinimum: minimum date delta in units 
    /// - parameter deltaMaximum: maximum date delta in units 
    /// - parameter animated: Whether or not to use animation for setting picker 
    func setDate(_ date:Date, unit:NSCalendar.Unit, deltaMinimum:Int, deltaMaximum:Int, animated:Bool) 
    { 
     setDate(date, animated: animated) 

     setMinMax(unit: unit, deltaMinimum: deltaMinimum, deltaMaximum: deltaMaximum) 
    } 

    /// set the min/max for the date picker (uses the pickers current date) 
    /// - parameter unit: (years, days, months, hours, minutes...) 
    /// - parameter deltaMinimum: minimum date delta in units 
    /// - parameter deltaMaximum: maximum date delta in units 
    func setMinMax(unit:NSCalendar.Unit, deltaMinimum:Int, deltaMaximum:Int) 
    { 
     if let gregorian = NSCalendar(calendarIdentifier:.gregorian) 
     { 
      if let minDate = gregorian.date(byAdding: unit, value: deltaMinimum, to: self.date) 
      { 
       minimumDate = minDate 
      } 

      if let maxDate = gregorian.date(byAdding: unit, value: deltaMaximum, to: self.date) 
      { 
       maximumDate = maxDate 
      } 
     } 
    } 
} 

Sposób setDate ustawi trzy wartości (data, minimum, maksimum) przykład UIDatePicker.

setMinMax ustala tylko minimum i maksimum. Minimum i maksimum są obliczane na podstawie bieżącej daty gracza.

Jednostka może być następujące wartości:

  • .year
  • .month
  • .day
  • .hour
  • .minute
  • .second

Aby ustawić datę za pomocą pl us i minus trzydzieści lat, kod byłoby:

var datePicker = UIDatePicker() 
var date = Date() 

datePicker.setDate(date, unit:.year, deltaMinimum:-30, deltaMaximum:30, animated:true) 
1

Moja Swift 4 wersja @toddg jest:

let currentDate = Date() 
var dateComponents = DateComponents() 
let calendar = Calendar.init(identifier: .gregorian) 
dateComponents.year = -100 
let minDate = calendar.date(byAdding: dateComponents, to: currentDate) 
dateComponents.year = -13 
let maxDate = calendar.date(byAdding: dateComponents, to: currentDate) 

Działa świetnie dla mnie!

Powiązane problemy