回答
当正确配置中,当用户完成旋转车轮 一个改变日期 或时间的 的UIDatePicker对象发送一个动作 消息;相关的控制事件 是UIControlEventValueChanged。
,所以你需要添加类在你的选择器来处理UIControlEventValueChanged
事件:
[picker addTarget:self action:@selector(dateChanged:)
forControlEvents:UIControlEventValueChanged];
...
- (void) dateChanged:(id)sender{
// handle date changes
}
迅速版
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)
}
斯威夫特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);
}
如果单击“完成”以设置默认值,这似乎不起作用。我必须滚动到不同的值并回滚到默认值,然后单击完成。有任何想法吗? – Ryan 2017-06-22 00:11:26
Ryan,我只在每次选择时将UIDatePicker中选定的值保存到Plist文件,因此如果应用程序在任何窗体上关闭或关闭最后选择的值,则可以在程序再次启动时重新加载。不只是在选择器中保存值。数据在这条路上过去了。如果将选取器从控件拖放到表单中,则没有按钮。 – 2017-06-29 17:48:09
斯威夫特4版本:
的UIDatePicker设置:
let datePicker = UIDatePicker()
datePicker.datePickerMode = .date
dateTextField.inputView = datePicker
datePicker.addTarget(self, action: #selector(datePickerChanged(picker:)), for: .valueChanged)
功能:
@objc func datePickerChanged(picker: UIDatePicker) {
print(picker.date)
}
如果你注意到,斯威夫特4需要@objc在功能,如果你打算使用#selector()
- 1. UIDatePicker可用日期
- 2. UIDatePicker:最短日期
- 3. 的UIDatePicker min和max日期不改变
- 4. 如何更改UIDatePicker中的日期格式
- 5. UIDatePicker更改“today”日期的文本颜色
- 6. 更改iOS设备日期
- 7. UIDatePicker,NSTimer,&格式化日期...?
- 8. UIDatePicker不更改值
- 9. 更改UIDatePicker订单?
- 10. 更改日期
- 11. 更改日期
- 12. 更改日期
- 13. 更改日期选择器样式iphone
- 14. 更改应用程序与日期日期Picker-的Xcode
- 15. VBA更改日期
- 16. 更改日期甲
- 17. MonoTouch.Dialog:ContentSizeForViewInPopover更改日期
- 18. DateTime.Parse更改日期?
- 19. json.stringfy更改日期
- 20. CMD日期更改日志
- 21. 更改jQuery日历日期
- 22. UIDatepicker日期只显示星期一的日期
- 23. 更改UIDatePicker模式后EXC_BAD_ACCESS
- 24. 更新,更改日期
- 25. UIDatePicker突出显示今天的日期 - 我如何更改颜色?
- 26. 如何更改日期选择器模式后重新加载UIDatePicker?
- 27. 添加日期后更改日期mysql
- 28. 更改日期前的日期
- 29. angularjs日期筛选更改日期
- 30. jquery当日期更改,更改另一个日期
值得注意的是,':(id)sender'部分对'dateChanged'函数起作用至关重要。没有它你会得到错误。 – 2012-01-22 11:10:49
@Chimp我没有看到:(id)发件人实际上是需要的,至少不是在iOS 5上。也许检查你的声明是否符合你的实现。 – 2012-05-23 14:02:44
:(id)sender本身不是“必需的”,但它是一个在iOS SDK中使用的有用惯例。如果您不想要:(id)发件人跟随该方法,请执行以下操作:[picker addTarget:self action:@selector(dateChange)forControlEvents:UIControlEventValueChanged]; – Ben 2013-12-03 07:53:07