2017-08-28 3 views
-2

カスタムUIViewコンポーネントはUITextField,UIImageView、もう1つはUIViewです。カスタムコンポーネントからUITextFieldをタップしたときにUIDatePickerを開く

UITextFieldの動作を変更して、タップしたときにUIDatePickerと表示する必要があります。これは私が実行しようとしているコードですが、何らかの理由で日付ピッカーは、それがタップだ時に開きません。

:私は私のViewController(以下コード)、それが働いた上で同じコードを使用

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回ではなく1回設定するほうが理想的ではありません。

datePickerを設定するために使用するViewクラスのメソッドはどれですか?描画が機能しないためです。

また、ユーザーが日付を選択したときにUITextFieldの値を変更する機能を追加するにはどうすればよいですか?あなたが何をする必要があるか

+0

についてコメントして人よりも役に立つことを約束コメント気軽に役立ちますpicker –

+0

ビューコントローラ –

+0

@LeoDabusのプロパティとして宣言するだけで、ViewControllerでDatePickerをインスタンス化し、各customViewで設定しますか? drawメソッドで使用する場合 – leofontes

答えて

0

は、あなたのテキストフィールドにaddTargetあり、その後、この方法では、あなたが後でコードでそれを識別することができますので、あなたはまた、あなたのテキストフィールド用のタグを設定する必要がありUIPickerView

self.textField.addTarget(self, action: #selector(ViewController.openDatesPicker), for: .touchDown) 

を表示します。

//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クラス内の上記のコードのすべて:また、あなたはこのようにそれを解決するために管理

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { 
    if textField.tag == 2 { 
     return true 
    } else { 
     return false 
    } 
} 
+0

それは私の問題の半分を解決する、大きな問題は、datePickerが開かないということです – leofontes

+0

あなたが試したself.addSubviews(datePicker) – Siyavash

0

を示すからキーボードを停止し、このメソッドを実装する必要があります。

誰にもこれとニーズとのトラブルを抱えている場合は、私は私はあなたがあなたの日付の参照を保持する必要があります質問:)

関連する問題