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.
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
}
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 ()
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);
}
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)
}