我的UIDatePicker有两个问题
UITextField 2次才能出现UIDatePickerUIDatePicker刚刚关闭,我认为最好是阻止它,并让一个按钮“完成”。代码:
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@IBAction func tfDateNaissanceEditing(sender: UITextField) {
let datePickerView:UIDatePicker = UIDatePicker()
datePickerView.datePickerMode = UIDatePickerMode.Date
sender.inputView = datePickerView
datePickerView.addTarget(self, action: Selector("datePickerValueChanged:"), forControlEvents: UIControlEvents.ValueChanged)
tfDateNaissance.resignFirstResponder()
}
func datePickerValueChanged(sender: UIDatePicker) {
let dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = NSDateFormatterStyle.MediumStyle
dateFormatter.timeStyle = NSDateFormatterStyle.NoStyle
tfDateNaissance.text = dateFormatter.stringFromDate(sender.date)
tfDateNaissance.resignFirstResponder()
}发布于 2015-12-23 09:24:20
又是我。
对于Q1,您正在侦听的tfDateNaissanceEditing函数的事件是什么?你对tfDateNaissance.resignFirstResponder()的目的是什么?我想那里发生的事情是你在听startEditing事件。因此,当您第一次触摸日期选择器时,它将被设置为输入视图,并在最后一行代码中立即被召回。
从理论上讲,只要在viewDidLoad中有如下代码,就可以实现您想要的结果
...
// your other functions
let datePickerView : UIDatePicker = UIDatePicker()
datePickerView.datePickerMode = UIDatePickerMode.Date
UITextField.inputView = datePickerView
datePickerView.addTarget(self, action: Selector("datePickerValueChanged:"), forControlEvents: UIControlEvents.ValueChanged)Q2。目前,每当DatePicker值发生变化时,它都会自行辞职,因此删除tfDateNaissance.resignFirstResponder()中的datePickerValueChanged函数将解决这一问题。如果您想要一个带有done按钮的自定义工具栏,您可以手动创建一个工具栏,并将其设置为viewDidLoad中的输入附件视图。您也可以通过使用导航栏(如this answer )来实现这一点。
顺便说一下,这个问题不需要didReceiveMemoryWarning函数。
发布于 2015-12-23 09:30:45
如果将tfDateNaissance.resignFirstResponder()留在datePickerValueChanged方法中,则选择器将在值更改后立即关闭。您必须添加一个cancel/done按钮并将resignFirstResponder()放入该函数中。我测试了代码,它起作用了。
我个人要做的是,首先声明datePicker
let datePickerView : UIDatePicker = UIDatePicker()然后在viewDidLoad
override func viewDidLoad() {
datePickerView.datePickerMode = UIDatePickerMode.Date
datePickerView.addTarget(self, action: Selector("datePickerValueChanged:"), forControlEvents: UIControlEvents.ValueChanged)
self.tfDateNaissance.inputView = self.datePickerView //your text field
//I add a toolBar to the datePicker
let pickerToolBar = UIToolbar()
pickerToolBar.barStyle = UIBarStyle.BlackOpaque //you can change the style
pickerToolBar.translucent = true
pickerToolBar.tintColor = UIColor.redColor() // or other colours
pickerToolBar.sizeToFit()
let spaceButtonPicker = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
let cancelButtonPicker = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: "cancelDatePicker:")
pickerToolBar.setItems([cancelButtonPicker, spaceButtonPicker], animated: false)
pickerToolBar.userInteractionEnabled = true
tfDateNaissance.inputAccessoryView = pickerToolBar
}
func datePickerValueChanged(sender: UIDatePicker) {
let dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = NSDateFormatterStyle.MediumStyle
dateFormatter.timeStyle = NSDateFormatterStyle.NoStyle
tfDateNaissance.text = dateFormatter.stringFromDate(sender.date)
//if you leave resignFirstResponder() here, the picker will close as soon as the value change
}这个处理完成按钮
func cancelDatePicker(sender: UIBarButtonItem){
tfDateNaissance.resignFirstResponder()
}这将是结果

发布于 2015-12-23 09:27:38
首先,对uitextfield使用委托回调方法。中显示日期选择器(通常是通过模式完成的)。
textFieldDidBeginEditing:在模态视图控制器中,添加一个完成按钮,该按钮取消模态视图控制器。还获取日期选择器中设置的日期值,并将它们放在文本视图中,如下所示:
self.PresentingViewController (您的功能);
https://stackoverflow.com/questions/34431942
复制相似问题