回答
當正確配置中,當用戶完成旋轉車輪 一個改變日期 或時間的 的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