2017-08-28 83 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類中上面的代碼。

其他人是否有這個需求,並幫助困難隨意發表評論,我保證我會比誰的問題:)