以下の内容でドラムロール式の西暦選択をできるようにしました。しかし、現在までの西暦を選択したいようにしたいのですがどのようにしたらいいのかわかりません。具体的には現在の西暦−6年程度から選択できるようにしたいです。つまり現在は2021年なので2015ー2021の間から選択。翌年は2016ー2022の間より選択可能というようにしたいです。教えていただけると幸いです。
swift
1class newacc: UIViewController,UINavigationControllerDelegate,UITextFieldDelegate, UIPickerViewDelegate, UIPickerViewDataSource { 2 // ピッカービューの列数 3 func numberOfComponents(in pickerView: UIPickerView) -> Int { 4 return 1 5 } 6 7 // ピッカービューの行数 8 func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 9 return list.count 10 } 11 12 // ピッカービューに表示する内容 13 func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 14 return list[row] 15 } 16 17 @IBOutlet weak var year1: UITextField! 18 19 let pickerView = UIPickerView() 20 let list: [String] = ["2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019","2020","2021","2022","2023","2024","2025","2026","2027","2028","2029"] 21 22 override func viewDidLoad() { 23 super.viewDidLoad() 24 25 picker() 26} 27 28 29 func picker(){ 30 31 32 // ピッカー設定 33 pickerView.delegate = self 34 pickerView.dataSource = self 35 36 // 決定・キャンセル用ツールバーの生成 37 let toolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 35)) 38 let spaceItem = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil) 39 let doneItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(done)) 40 let cancelItem = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(cancel)) 41 toolbar.setItems([cancelItem, spaceItem, doneItem], animated: true) 42 43 // インプットビュー設定 44 year1.inputView = pickerView 45 year1.inputAccessoryView = toolbar 46 47 // デフォルト設定 48 pickerView.selectRow(10, inComponent: 0, animated: false) 49 50 51 } 52 53 54 @objc func done() { 55 year1.endEditing(true) 56 year1.text = "(list[pickerView.selectedRow(inComponent: 0)])" 57 } 58 // キャンセルボタンのアクション指定 59 @objc func cancel(){ 60 year1.endEditing(true) 61 } 62
まず、
・今年が西暦何年かを求める方法
・今年が 2021 年として、2016 〜 2021 の配列を作る方法
はそれぞれ分かりますか? それが分かれば、あとは組み合わせるだけですね。
Calendar.current.component(.year, from: Date())で今年が西暦何年かを求めることはできました。
全然綺麗ではありませんが let list : [Int] = [Calendar.current.component(.year, from: Date()) - 1, Calendar.current.component(.year, from: Date()) - 2, Calendar.current.component(.year, from: Date()) - 3]
ひとまずこれで求めました。しかし、実行してみるとドラムロールに表示される文字が「?」になってしまいます。選択をすると西暦自体は選択できます。問題としては
private func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: UIView) -> Int? {
return list[row]
}
この部分な気がするのですがいまいちわかりません。
教えていただけると幸いです。