UIPickerView 未在 UITextField 中选择日期
UIPickerView is not selecting the date in UITextField
我是 swift 的新人。在执行此应用程序时,登录屏幕转到签名 in.On,选择 "Already have account sign up"。您可以注册视图。在尝试开发选择器 view.These 的注册中,开发选择器视图时出现了两个问题
1) 选择器视图应该在加载视图控制器时隐藏。但是当视图控制器出现时选择器视图是可见的?
2)在选择日期选择器视图上完成的按钮时,请选择应用程序崩溃。但是它应该在文本字段中显示相应的日期?
func showDatePicker(){
//Formate Date
datePicker.datePickerMode = .date
//ToolBar
let toolbar = UIToolbar();
toolbar.sizeToFit()
let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.bordered, target: self, action: "donedatePicker")
let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil)
let cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.bordered, target: self, action: "cancelDatePicker")
toolbar.setItems([doneButton,spaceButton,cancelButton], animated: false)
dateTextField.inputAccessoryView = toolbar
dateTextField.inputView = datePicker
}
func donedatePicker(){
let formatter = DateFormatter()
formatter.dateFormat = "dd/MM/yyyy"
dateTextField.text = formatter.string(from: datePicker.date)
self.view.endEditing(true)
}
func cancelDatePicker(){
self.view.endEditing(true)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
pickerView.delegate=self
pickerView.dataSource=self
genderTextField.inputView=pickerView
showDatePicker()
}
如何避免此崩溃。您可以从这里下载项目 link https://drive.google.com/file/d/1a6Pmw2gVDwLP9grL8tG72NBx-tKwZozI/view?usp=sharing
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
pickerView.delegate=self
pickerView.dataSource=self
genderTextField.inputView=pickerView
showDatePicker()
}
错误就在这里。在 viewDidLoad
中加载视图时,日期选择器会自行显示。因此,您必须添加一个点击操作以显示选择器视图并在其中调用它。
例如
@objc fileprivate func showIt(_ sender:UIButton){
showDatePicker()
}
此外,您的操作必须使用#selector
进行设置
let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.bordered, target: self, action: "donedatePicker")
改为
let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.bordered, target: self, action: #selector(donedatePicker))
对于错误 #1,您必须以某种方式 firstResponder
UITextField
,您必须辞职。
你能为 textFieldDelegate 添加这个函数吗?
extension YourViewController: UITextFieldDelegate{
func textFieldDidBeginEditing(_ textField: UITextField) {
if textField.isFirstResponder{
showDatePicker()
}
}
}
你错过了一些东西,我已经更新了代码
override func viewDidLoad() {
super.viewDidLoad()
pickerView.delegate=self
pickerView.dataSource=self
genderTextField.inputView = pickerView
genderTextField.delegate = self
dateTextField.delegate = self
}
分配文本字段委托并实现用于显示日期选择器的函数 textFieldShouldBeginEditing 函数
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
if textField.tag == 1 { //Date Text Field
showDatePicker()
}
return true
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
我已经从情节提要中分配了日期文本字段的标签值,并从情节提要中隐藏了选择器视图。它将解决你的两个问题
首先你需要给 UITextField 委托,即
dateTextField.delegate = 自己
然后您需要使用注册 class 的 UITextFieldDelegate 方法进行确认,即
func textFieldDidBeginEditing(_ textField: UITextField) {
if textField == dateTextField {
self.showDatePicker()
}
}
使用上面的代码可能会对你有所帮助。
您应该在点击日期文本字段时调用此 showDatePicker()
。
func textFieldDidBeginEditing(_ textField: UITextField) {
let datePicker = UIDatePicker()
if startDateTxt == textField{
textField.inputView = datePicker
datePicker.addTarget(self, action: #selector(showDatePicker()), for: .valueChanged)
}
}
第二个错误:
let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.bordered, target: self, action: #selector(donedatePicker))
我是 swift 的新人。在执行此应用程序时,登录屏幕转到签名 in.On,选择 "Already have account sign up"。您可以注册视图。在尝试开发选择器 view.These 的注册中,开发选择器视图时出现了两个问题
1) 选择器视图应该在加载视图控制器时隐藏。但是当视图控制器出现时选择器视图是可见的?
2)在选择日期选择器视图上完成的按钮时,请选择应用程序崩溃。但是它应该在文本字段中显示相应的日期?
func showDatePicker(){
//Formate Date
datePicker.datePickerMode = .date
//ToolBar
let toolbar = UIToolbar();
toolbar.sizeToFit()
let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.bordered, target: self, action: "donedatePicker")
let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil)
let cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.bordered, target: self, action: "cancelDatePicker")
toolbar.setItems([doneButton,spaceButton,cancelButton], animated: false)
dateTextField.inputAccessoryView = toolbar
dateTextField.inputView = datePicker
}
func donedatePicker(){
let formatter = DateFormatter()
formatter.dateFormat = "dd/MM/yyyy"
dateTextField.text = formatter.string(from: datePicker.date)
self.view.endEditing(true)
}
func cancelDatePicker(){
self.view.endEditing(true)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
pickerView.delegate=self
pickerView.dataSource=self
genderTextField.inputView=pickerView
showDatePicker()
}
如何避免此崩溃。您可以从这里下载项目 link https://drive.google.com/file/d/1a6Pmw2gVDwLP9grL8tG72NBx-tKwZozI/view?usp=sharing
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
pickerView.delegate=self
pickerView.dataSource=self
genderTextField.inputView=pickerView
showDatePicker()
}
错误就在这里。在 viewDidLoad
中加载视图时,日期选择器会自行显示。因此,您必须添加一个点击操作以显示选择器视图并在其中调用它。
例如
@objc fileprivate func showIt(_ sender:UIButton){
showDatePicker()
}
此外,您的操作必须使用#selector
进行设置let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.bordered, target: self, action: "donedatePicker")
改为
let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.bordered, target: self, action: #selector(donedatePicker))
对于错误 #1,您必须以某种方式 firstResponder
UITextField
,您必须辞职。
你能为 textFieldDelegate 添加这个函数吗?
extension YourViewController: UITextFieldDelegate{
func textFieldDidBeginEditing(_ textField: UITextField) {
if textField.isFirstResponder{
showDatePicker()
}
}
}
你错过了一些东西,我已经更新了代码
override func viewDidLoad() {
super.viewDidLoad()
pickerView.delegate=self
pickerView.dataSource=self
genderTextField.inputView = pickerView
genderTextField.delegate = self
dateTextField.delegate = self
}
分配文本字段委托并实现用于显示日期选择器的函数 textFieldShouldBeginEditing 函数
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
if textField.tag == 1 { //Date Text Field
showDatePicker()
}
return true
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
我已经从情节提要中分配了日期文本字段的标签值,并从情节提要中隐藏了选择器视图。它将解决你的两个问题
首先你需要给 UITextField 委托,即
dateTextField.delegate = 自己
然后您需要使用注册 class 的 UITextFieldDelegate 方法进行确认,即
func textFieldDidBeginEditing(_ textField: UITextField) {
if textField == dateTextField {
self.showDatePicker()
}
}
使用上面的代码可能会对你有所帮助。
您应该在点击日期文本字段时调用此 showDatePicker()
。
func textFieldDidBeginEditing(_ textField: UITextField) {
let datePicker = UIDatePicker()
if startDateTxt == textField{
textField.inputView = datePicker
datePicker.addTarget(self, action: #selector(showDatePicker()), for: .valueChanged)
}
}
第二个错误:
let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.bordered, target: self, action: #selector(donedatePicker))