2017-08-28 57 views
-2

我有一个自定义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值?

+0

评论你需要保持你的日期的引用人民更有帮助picker –

+0

只需将其声明为您的视图控制器的属性 –

+0

@LeoDabus如此在ViewController上实例化DatePicker并将其设置在每个customView上?在绘图方法 – leofontes

回答

0

你需要做的是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 
    } 
} 
+0

这只解决了我一半的问题,最大的问题是datePicker无法打开 – leofontes

+0

你有没有试过self.addSubviews(datePicker) – Siyavash

0

设法解决它像这样停止键盘:

//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类中上面的代码。

其他人是否有这个需求,并帮助困难随意发表评论,我保证我会比谁的问题:)