UITextField 和 UIDatePicker
UITextField and UIDatePicker
我的 UIDatePicker
有 2 个问题:
我必须在 UITextField
上轻按 2 次才能显示 UIDatePicker
当我连续 select 某事时,例如那一天 UIDatePicker
紧随其后关闭,我认为最好阻止它并有一个按钮 "done"
代码:
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()
}
又是我
对于问题 1,您正在收听的 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
的值改变时,它都会自行辞职,所以删除 datePickerValueChanged
函数中的 tfDateNaissance.resignFirstResponder()
将解决问题。如果你想要一个带有完成按钮的自定义工具栏,你可以手动创建一个并将其设置为输入附件视图,也在 viewDidLoad
中。您也可以通过使用
之类的导航栏来实现此目的
顺便说一句,这个问题不需要 didReceiveMemoryWarning
函数。
首先对uitextfield 使用委托回调方法。在
中显示日期选择器(通常以模态方式完成)
textFieldDidBeginEditing:
在模态视图控制器中添加一个关闭模态视图控制器的完成按钮。还获取在日期选择器中设置的日期值,并通过类似以下内容将它们放入文本视图中:
[self.PresentingViewController(你的函数)];
如果您在 datePickerValueChanged
方法中保留 tfDateNaissance.resignFirstResponder()
,选择器将在值更改后立即关闭。您必须添加一个 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()
}
这将是结果
我的 UIDatePicker
有 2 个问题:
我必须在
UITextField
上轻按 2 次才能显示UIDatePicker
当我连续 select 某事时,例如那一天
UIDatePicker
紧随其后关闭,我认为最好阻止它并有一个按钮 "done"
代码:
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()
}
又是我
对于问题 1,您正在收听的 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
的值改变时,它都会自行辞职,所以删除 datePickerValueChanged
函数中的 tfDateNaissance.resignFirstResponder()
将解决问题。如果你想要一个带有完成按钮的自定义工具栏,你可以手动创建一个并将其设置为输入附件视图,也在 viewDidLoad
中。您也可以通过使用
顺便说一句,这个问题不需要 didReceiveMemoryWarning
函数。
首先对uitextfield 使用委托回调方法。在
中显示日期选择器(通常以模态方式完成)textFieldDidBeginEditing:
在模态视图控制器中添加一个关闭模态视图控制器的完成按钮。还获取在日期选择器中设置的日期值,并通过类似以下内容将它们放入文本视图中:
[self.PresentingViewController(你的函数)];
如果您在 datePickerValueChanged
方法中保留 tfDateNaissance.resignFirstResponder()
,选择器将在值更改后立即关闭。您必须添加一个 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()
}
这将是结果