web-dev-qa-db-fra.com

UIDatePicker - Date de modification

Je viens de commencer à utiliser UIDatePicker dans mon application iPad, mais existe-t-il un moyen de vérifier si la date a été modifiée?

Je veux faire quelque chose quand la date est changée. J'espère que vous pourrez aider, merci.

25
Josh Kahane

Lorsqu'il est correctement configuré, un objet UIDatePicker envoie un message d'action Lorsqu'un utilisateur termine de tourner sur l'une des roues pour modifier la date Ou l'heure; l'événement de contrôle associé est UIControlEventValueChanged.

vous devez donc ajouter votre classe pour gérer l'événement UIControlEventValueChanged dans votre sélecteur:

[picker addTarget:self action:@selector(dateChanged:) 
              forControlEvents:UIControlEventValueChanged];
...

- (void) dateChanged:(id)sender{
   // handle date changes
}
74
Vladimir

Version Swift 4:

Configuration d'UIDatePicker:

    let datePicker = UIDatePicker()
    datePicker.datePickerMode = .date
    dateTextField.inputView = datePicker
    datePicker.addTarget(self, action: #selector(datePickerChanged(picker:)), for: .valueChanged)

Une fonction:

@objc func datePickerChanged(picker: UIDatePicker) {
    print(picker.date)
}

Si vous remarquez, Swift 4 nécessite @objc dans la fonction si vous voulez utiliser #selector ()

9
John Riselvato

Swift 3 version:

override func viewDidLoad() {
    super.viewDidLoad()

    if sYourSelectedDate == "" {
        if let plist = Plist(name: "YourPlistName") {
            sYourSelectedDate = plist.getSingleValueInPlistFile(sFieldName: "yourSelectedDate")!

        }
    }
    if sYourSelectedDateTime == "" {
        if let plist = Plist(name: "YourPlistName") {
            sYourSelectedDateTime = plist.getSingleValueInPlistFile(sFieldName: "yourSelectedDateTime")!

        }
    }

    // add dateTimePickerChanged event (e.g., if device is powered down, values get saved)
    self.dateTimePicker.addTarget(self, action: #selector(dateTimeChanged), for: .valueChanged);

    // set min and max dates of datetimePicker
    // subtracting 1 minute from current time
    let currentTempDate = NSDate()
    let newDate = currentTempDate.addingTimeInterval(-1 * 60);
    let currentDate = newDate;

    let calendar: NSCalendar = NSCalendar(calendarIdentifier: NSCalendar.Identifier.gregorian)!

    calendar.timeZone = NSTimeZone(name: "US/Eastern")! as TimeZone

    let components: NSDateComponents = NSDateComponents()
    components.calendar = calendar as Calendar

    components.year = -1
    let minDate: NSDate = calendar.date(byAdding: components as DateComponents, to: currentDate as Date, options: NSCalendar.Options(rawValue: 0))! as NSDate

    let maxDate: NSDate = currentDate as NSDate

    self.dateTimePicker.minimumDate = minDate as Date
    self.dateTimePicker.maximumDate = maxDate as Date

    //print("minDate: \(minDate)")
    //print("maxDate: \(maxDate)")

    if(sYourSelectedDateTime == "")
    {
        // subtracting 1 minute from current time
        let currentTempDate = NSDate()
        let newDate = currentTempDate.addingTimeInterval(-1 * 60);
        let currentDate2 = newDate;

        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat =  "MM/dd/yyyy h:mm a"

        calendar.timeZone = NSTimeZone(name: "US/Eastern")! as TimeZone

        let userCalendar = Calendar.current
        let requestedComponents: Set<Calendar.Component> = [
            .year,
            .month,
            .day,
            .hour,
            .minute
        ]

        let dateTimeComponents = userCalendar.dateComponents(requestedComponents, from: currentDate2 as Date)

        let iPhoneDateComponents = NSDateComponents()
        iPhoneDateComponents.year = dateTimeComponents.year!;
        iPhoneDateComponents.month = dateTimeComponents.month!;
        iPhoneDateComponents.day = dateTimeComponents.day!;
        iPhoneDateComponents.hour = dateTimeComponents.hour!;
        iPhoneDateComponents.minute = dateTimeComponents.minute!;
        iPhoneDateComponents.timeZone = NSTimeZone(name: "US/Eastern") as TimeZone?

        let iPhoneDate = calendar.date(from: iPhoneDateComponents as DateComponents)!

        self.dateTimePicker.date = iPhoneDate;
        sYourInitialDateTime = dateFormatter.string(from: self.dateTimePicker.date);

        if let plist = Plist(name: "YourPlistFile") {
            plist.editSingleValueInPlistFile(dictString: "YourPlistFile", sFieldName: "yourInitialDateTime", sValue: sYourInitialDateTime)
        }

    } else {
        let dateFormatter: DateFormatter = DateFormatter()
        dateFormatter.dateFormat = "MM/dd/yyyy h:mm a"
        let dateObj = dateFormatter.date(from: sYourSelectedDateTime)
        self.dateTimePicker.date = dateObj!
    }

}

func dateTimeChanged(picker: UIDatePicker) {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat =  "MM/dd/yyyy"
    sYourSelectedDate = dateFormatter.string(from: picker.date);
    dateFormatter.dateFormat =  "MM/dd/yyyy h:mm a"

    sYourSelectedDateTime = dateFormatter.string(from: picker.date);

    if (sYourSelectedDateTime == sYourInitialDateTime)
    {
        sYourSelectedDate = "";
        sYourSelectedDateTime = "";
    }

    if let plist = Plist(name: "YourPlistFile") {
        plist.editSingleValueInPlistFile(dictString: "YourPlistName", sFieldName: "yourSelectedDate", sValue: sYourSelectedDate)
        plist.editSingleValueInPlistFile(dictString: "YourPlistName", sFieldName: "yourSelectedDateTime", sValue: sYourSelectedDateTime)

    } else {
        print("Unable to get Plist")
    }
    print(sYourSelectedDate);
    print(sYourSelectedDateTime);

}
2
user7965210

Version rapide

override func viewDidLoad() {
    super.viewDidLoad()
    let picker = UIDatePicker(frame: CGRectMake(0, 0, 200, 200))
    picker.addTarget(self, action: #selector(datePickerChanged(_:)), forControlEvents: .ValueChanged)
    view.addSubview(picker)
}

func datePickerChanged(picker: UIDatePicker) {
    print(picker.date)
}
0
ethanneff