2017-11-17 3 views
1

시간이 유일한 UIDatePicker 변수가 있습니다. 다른 시간을 다른 TextFields으로 설정할 수 있기를 바랍니다. 내가 설정 한 방식은 한 번 변경하면 모두 변경됩니다.스위프트 : 하나의 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 
} 

가 하나 UIDatePicker는 별도로 모든 시간을 관리해야 할, 아니면 각 텍스트 필드에 대한 채우기 위해 14 다른 사람을 만들어야 할 수 있습니까?

답변

1

그래서 만 제공되는 날짜와 현재 선택된 텍스트 필드를 채우려하고 텍스트 필드의 모든 당신의 ViewController의 주요보기 내에 위치 (또는 어느 사용자가 지정한 뷰하는 경우, 당신은 단지 확인해야 그 파단 당신이 반복하고 던져 당신의 UITextField의를 포함하는보기), 당신은 단지 첫 번째 응답자 중 텍스트 필드를 확인 할 수 다음과 같이 여기에 데이터를 추가하는 것이 : 또한

@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는 타입 유추 된 언어이고 문자열을 String으로 캐스팅하는 것은 무의미합니다 –

+0

좋은 캐치, 나는 OP의 코드를 복사하고이를 정리하는 것을 잊었습니다! – MQLN

+0

'값 유형'오류가 발생합니다. UIView '회원 없음'텍스트가 있습니다. –

관련 문제