2017-11-17 7 views
1

私はただ1つの時間があるUIDatePicker変数を持っています。私は異なる時間を異なるTextFieldsに設定できるようにしたい。私が設定した方法は、私が一度変更すると、すべてが変わるということです。スイフト:1つのUITimePicker、複数のテキストフィールド

コード:

*@IBOutlets for all the UITextFields...* 

private var datePicker = UIDatePicker() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.setupDatePicker() 
    self.setupTextFields() 
} 

func setupDatePicker() { 
    self.datePicker.frame = CGRect(x: 0, y: 50, width: self.view.frame.width, height: 200) 
    self.datePicker.timeZone = NSTimeZone.local 
    self.datePicker.datePickerMode = .time 
    self.datePicker.minuteInterval = 30 
    self.datePicker.backgroundColor = .white 
    self.datePicker.addTarget(self, action: #selector(self.timeValueChanged(_:)), for: .valueChanged) 
} 

func setupTextFields() { 
    self.mondayOpenTF.inputView = self.datePicker 
    self.mondayCloseTF.inputView = self.datePicker 
    self.tuesdayOpenTF.inputView = self.datePicker 
    self.tuesdayCloseTF.inputView = self.datePicker 
    self.wednesdayOpenTF.inputView = self.datePicker 
    self.wednesdayCloseTF.inputView = self.datePicker 
    self.thursdayOpenTF.inputView = self.datePicker 
    self.thursdayCloseTF.inputView = self.datePicker 
    self.fridayOpenTF.inputView = self.datePicker 
    self.fridayCloseTF.inputView = self.datePicker 
    self.saturdayOpenTF.inputView = self.datePicker 
    self.saturdayCloseTF.inputView = self.datePicker 
    self.sundayOpenTF.inputView = self.datePicker 
    self.sundayCloseTF.inputView = self.datePicker 
} 

@objc 
func timeValueChanged(_ sender: UIDatePicker) { 
    let dateFormatter: DateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "h:mm a" 
    let date: String = dateFormatter.string(from: sender.date) 

    self.mondayOpenTF.text = date as String 
    self.mondayCloseTF.text = date as String 
    self.tuesdayOpenTF.text = date as String 
    self.tuesdayCloseTF.text = date as String 
    self.wednesdayOpenTF.text = date as String 
    self.wednesdayCloseTF.text = date as String 
    self.thursdayOpenTF.text = date as String 
    self.thursdayCloseTF.text = date as String 
    self.fridayOpenTF.text = date as String 
    self.fridayCloseTF.text = date as String 
    self.saturdayOpenTF.text = date as String 
    self.saturdayCloseTF.text = date as String 
    self.sundayOpenTF.text = date as String 
    self.sundayCloseTF.text = date as String 
} 

それは1 UIDatePickerが別々にすべての時間を管理するために持っている、または私は各テキストフィールドのために埋めるために14種類のものを作成しなければならないのは可能ですか?

答えて

1

だから、あなただけの提供日付で現在選択されてテキストフィールドを移入したい、とあなたのテキストフィールドのすべてがあなたのViewControllerのMAINビュー(またはその中に配置されている場合は、これまでに、指定したビュー、あなただけを確認する必要がありますそのサブビューあなたがループしているスローあなたUITextField Sを含むビュー)は、あなただけの最初の応答者である方のテキストフィールドをチェックすることができ、その後、このように、それにデータを追加すること:また

@objc 
func timeValueChanged(_ sender: UIDatePicker) { 
    let dateFormatter: DateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "h:mm a" 
    let date: String = dateFormatter.string(from: sender.date) 

    if let textfield = view.subviews.first(where: { $0 is UITextField }) as? UITextView, textfield.isFirstResponder { 
     textfield.text = date 
    } 
} 

、あなたは潜在的可能性同様の方法でセットアップコードをクリーンアップします。例:

setupTextFields() { 

    for textfield in (view.subviews.map {$0 as? UITextField}.flatMap{$0}) { 
     textfield.inputView = datePicker 
    } 
} 
+1

日付フォーマッタのロケールを "en_US_POSIX"に設定する必要があります。 https://stackoverflow.com/questions/25657123/swift-nsdateformatter-not-working/25671175#25671175 Btw Swiftは型推論言語であり、文字列を文字列としてキャストするのは無意味です –

+0

良いキャッチ、私はOPのコードをコピーして、それをきれいにするのを忘れました! – MQLN

+0

「値の種類」のエラーが表示されるUIViewにメンバー 'text'がありません –

関連する問題