2010-06-17 11 views

risposta

71

Non testato, ma probabilmente si desidera qualcosa di simile.

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

Non ha intenzione di rovinare se si dispone anche di colonna giorno e mese? Limiterà i mesi e i giorni alla data attuale, nella sua forma attuale. Come oggi è il 3 giugno 2015. Gli anni andranno bene. Giorno sarà bloccato al valore massimo 3 e il mese sarà bloccato al valore massimo giugno – NSNoob

+0

No. Stai solo speculando ciecamente? – warrenm

+0

No, l'ho provato in un'app a cui sto lavorando e ho affrontato il problema che ti ho detto. Alla fine ho dovuto mettere i controlli sulla data separatamente. – NSNoob

16
m_datePicker.maximumDate = [NSDate date]; 

È possibile utilizzare questa riga di codice per impostare la data massima (Oggi).

+0

e come posso nascondere la data> maximumDate? – alex

+0

In realtà imposterà la data massima al minuto esatto in cui quella riga di codice viene eseguita –

+0

Non consente di scegliere una data più tardi rispetto a oggi ma l'utente vede già le date successive. –

1

Si prega di provare questo codice 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

Adattamento risposta di @ warrenm a 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

stava guardando questo problema oggi e si avvicinò con una soluzione a Swift 3 che si estende 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 
      } 
     } 
    } 
} 

Procedimento setDate imposterà tre valori (data, minimo, massimo) dell'istanza UIDatePicker.

setMinMax imposta solo il minimo e il massimo. Il minimo e il massimo sono calcolati utilizzando la data corrente del raccoglitore.

unità possono essere i seguenti valori:

  • .year
  • .month
  • .Day
  • .hour
  • .minute
  • .second

Per impostare la data con pl noi e meno di trent'anni, il codice sarebbe:

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

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

La mia versione rapida 4 di @toddg è:

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) 

Funziona alla grande per me!

Problemi correlati