2017-09-28 1 views

답변

1

예 당신이 할 수있는 보여줍니다. 하지만 둘을 결합해야합니다. 수년간 피커 뷰를 사용하고 날짜 선택 도구의 최소값을 선택한 연도의 첫 번째 날짜로 설정하고 최대 값을 해당 연도의 마지막 날짜로 설정합니다. 당신이 일년 추가하지 않습니다 당신의 UIDatePicker 특성 [datePickerMode] [1]

import UIKit 

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { 
    @IBOutlet weak var pickerView: UIPickerView! 
    @IBOutlet weak var datePicker: UIDatePicker! 
    let years = Array(Date().year-3...Date().year+3) 
    var date = Date() 
    var lastIndex = 3 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     pickerView.delegate = self 
     pickerView.dataSource = self 
     datePicker.date = Date() 
    } 
    @IBAction func dateChanged(_ datePicker: UIDatePicker) { 
     date = datePicker.date 
     print(datePicker.date.year) 
     print(datePicker.date) 
    } 
    override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 
     pickerView.selectRow(3, inComponent: 0, animated: true) 
     setDatePickerMinimumAndMaximumDatesFor(year: years[3]) 
    } 
    func pickerView(_ pickerView: UIPickerView, 
        numberOfRowsInComponent component: Int) -> Int { 
     return years.count 
    } 
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
     return String(years[row]) 
    } 
    func numberOfComponents(in pickerView: UIPickerView) -> Int { 
     return 1 
    } 
    func setDatePickerMinimumAndMaximumDatesFor(year: Int) { 
     datePicker.minimumDate = year.firstDayOfTheYear 
     datePicker.maximumDate = year.lastDayOfTheYear 
    } 

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
setDatePickerMinimumAndMaximumDatesFor(year: years[row]) 
     if let optionalDate = Calendar.current.date(byAdding: .year, value: (lastIndex > row ? row - lastIndex : -(lastIndex - row)), to: date) { 
      datePicker.date = optionalDate 
     } 
     print(datePicker.date.year) 
     print(datePicker.date) 
    } 
} 
extension Date { 
    var year: Int { 
     return Calendar.current.component(.year, from: self) 
    } 
} 
extension Int { 
    var firstDayOfTheYear: Date { 
     return DateComponents(calendar: .current, year: self, month: 1, day: 1).date! 
    } 
    var lastDayOfTheYear: Date { 
     return DateComponents(calendar: .current, year: self, month: 12, day: 31).date! 
    } 
} 
+0

.dateAndTime로 설정하는 것이 필요합니다. – Jevon718

+0

내가하지 않는 한 그것을 놓치지 않는 한. – Jevon718

+0

도움을 주셔서 감사합니다 – Jevon718