UIDatePicker-Upon Date Changed

je viens de commencer à utiliser UIDatePicker dans mon application iPad, mais y a-t-il un moyen de vérifier quand la date a été changée?

je veux faire quelque chose quand la date est modifiée. J'espère que vous pouvez aider, merci.

22
demandé sur Josh Kahane 2010-09-24 13:05:01

4 réponses

correctement configuré, un L'objet UIDatePicker envoie une action message lorsque l'Utilisateur termine la rotation une des roues pour changer la date ou de temps; l'événement est UIControlEventValueChanged.

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

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

- (void) dateChanged:(id)sender{
   // handle date changes
}
73
répondu Vladimir 2010-09-24 09:16:17

Swift 4 version:

UIDatePicker De L'Installation:

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

Fonction:

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

si vous le remarquez, Swift 4 nécessite @objc dans la fonction si vous allez utiliser #sélecteur()

7
répondu John Riselvato 2018-03-09 07:41:26

version Swift 3:

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
répondu 2017-06-30 14:24:54

version swift

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
répondu ethanneff 2016-05-18 23:15:06