从自定义组件中点击UITextField时打开UIDatePicker
问题描述:
我有一个自定义UIView
组件,其中有一个UITextField
,UIImageView
和另一个UIView
。从自定义组件中点击UITextField时打开UIDatePicker
我需要更改UITextField
的行为,以在点击时显示UIDatePicker
。这是我尝试执行的代码,但由于某些原因,日期选择器没有打开时,它的挖掘:
class TextFieldWithFeedback : UIView {
@IBOutlet weak var textField: UITextField!
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var underlineView: UIView!
override func draw(_ rect: CGRect) {
let datePicker = UIDatePicker()
datePicker.datePickerMode = .date
self.textField.inputView = datePicker
}
}
当我用我的视图控制器(下面的代码),它的工作相同的代码:
override func viewDidLoad() {
super.viewDidLoad()
let datePicker = UIDatePicker()
datePicker.datePickerMode = .date
customView.textField.inputView = datePicker
}
现在,这个解决方案的工作原理,但它不是理想的,因为我有8个自定义视图,它会更好地设置一次而不是8次。
我应该使用哪种View类的方法来设置datePicker?由于绘制不起作用。
此外,如何在用户选择日期时附加功能来修改我的UITextField
值?
答
你需要做的是addTarget你的文本字段,然后在方法显示的UIPickerView
self.textField.addTarget(self, action: #selector(ViewController.openDatesPicker), for: .touchDown)
您还应该设置标记为您的文本框,以便您可以稍后在代码中识别它。你也应该实现此方法,从显示出来
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
if textField.tag == 2 {
return true
} else {
return false
}
}
答
设法解决它像这样停止键盘:
//To control whether or not to use the DatePicker, easily customized on the Storyboard
@IBInspectable var useDatePicker: Bool = false
@IBAction func textFieldEditing(_ sender: UITextField) {
self.textFieldStartedEditing(sender: sender)
}
func textFieldStartedEditing(sender: UITextField) {
if useDatePicker {
let datePickerView:UIDatePicker = UIDatePicker()
datePickerView.datePickerMode = .date
sender.inputView = datePickerView
datePickerView.addTarget(self, action: #selector(self.datePickerValueChanged), for: UIControlEvents.valueChanged)
}
}
func datePickerValueChanged(sender: UIDatePicker) {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/YYYY"
self.textField.text = dateFormatter.string(from: sender.date)
}
我所有的customView类中上面的代码。
其他人是否有这个需求,并帮助困难随意发表评论,我保证我会比谁的问题:)
评论你需要保持你的日期的引用人民更有帮助picker –
只需将其声明为您的视图控制器的属性 –
@LeoDabus如此在ViewController上实例化DatePicker并将其设置在每个customView上?在绘图方法 – leofontes