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