web-dev-qa-db-fra.com

UIDatePicker, définition des dates maximales et minimales en fonction de la date du jour

Si j’ai un UIDatePicker et que je souhaite que les dates minimale et maximale se situent entre trente et trente ans, comment l’organiserais-je?

35
cannyboy

Non testé, mais vous voulez probablement quelque chose comme ça.

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];

Mise à jour pour Swift 4.1

let calendar = Calendar(identifier: .gregorian)
var comps = DateComponents()
comps.year = 30
let maxDate = calendar.date(byAdding: comps, to: Date())
comps.year = -30
let minDate = calendar.date(byAdding: comps, to: Date())
datePicker.maximumDate = maxDate
datePicker.minimumDate = minDate
78
warrenm
m_datePicker.maximumDate = [NSDate date];

Vous pouvez utiliser cette ligne de code pour définir la date maximale (aujourd'hui).

18
Venu Gopal Tewari

Ma version Swift 4 de @toddg est:

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)

Fonctionne bien pour moi!

5
David Fabreguette

Adapter la réponse de @ warrenm à 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
3
toddg

S'il vous plaît essayez ce code Ios8 +

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];
1
Binoy jose

Étudie cette question aujourd'hui et propose une solution dans Swift 3 qui étend 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
            }
        }
    }
}

La méthode setDate définira trois valeurs (date, minimum, maximum) de l'instance UIDatePicker.

setMinMax ne définit que le minimum et le maximum. Le minimum et le maximum sont calculés en utilisant la date du sélecteur.

Unité peut être les valeurs suivantes:

  • .année
  • .mois
  • .journée
  • .heure
  • .minute
  • .seconde

Pour définir la date avec plus et moins trente ans, le code serait le suivant:

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

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

Réglez la date maximum à aujourd'hui Swift 4.2

datePicker.maximumDate = Date()
0
user2672052