【Swift】年/月のPickerViewをInt型で作る

こんにちは、@nekokichi1_yos2です。

 

MoneyMonthで年と月だけのPickerViewを作る際、Data型で作る方法が見当たらず、仕方なくInt型で作りました。

 

nekokichi2yos2.hatenablog.com

 

Data型だと、どうしても日にちや時間を含めてしまい、〇〇だけを取得する方法がありません。

 

仮にData型で再利用するなら、Int→Data、に変換でもすればいいんじゃないでしょうか。

 

f:id:nekokichi_yos2:20200313101247p:plain

 

import UIKit

class ViewController: UIViewController,UIScrollViewDelegate,UIPickerViewDelegate,UIPickerViewDataSource {
    
    @IBOutlet weak var textField: UITextField!
    
    var picker = UIPickerView()
    var toolbar = UIToolbar()
    
    //pickerView用で表示させる年と月の変数
    let year = Array<Int>(2000...2050)
    let month = Array<Int>(1...12)
    
    //pickerViewで選択した年月を保持
    var display_year = Int()
    var display_month = Int()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        picker.delegate = self
        picker.dataSource = self
        
        //ツールバー
        toolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 35))
        //空白(スペース)
        let spacelItem = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil)
        //完了ボタン
        let doneItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(done))
        //空白と完了ボタンをツールバーにセット
        toolbar.setItems([spacelItem, doneItem], animated: true)
        
        //textFieldにpickerViewとtoolbarをセット
        textField.inputView = picker
        textField.inputAccessoryView = toolbar
        
    }
    
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 2
    }
    
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        switch component {
        case 0:
            return year.count
        case 1:
            return month.count
        default:
            break
        }
        return 0
    }
    
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        switch component {
        case 0:
            return "\(year[row])"
        case 1:
            return "\(month[row])"
        default:
            break
        }
        return ""
    }
    
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        //pickerViewで選択した値
        display_year = year[pickerView.selectedRow(inComponent: 0)]
        display_month = month[pickerView.selectedRow(inComponent: 1)]
        //textFieldに表示
        textField.text = "\(display_year)/\(display_month)"
    }
    
    @objc func done() {
        //キーボードを閉じる
        self.view.endEditing(true)
    }

}