engeng52821
@engeng52821 (wasa wi)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

pickerを複数個実装する方法

解決したいこと

ドラムロール式のpickerに関する質問です。一つの画面内に複数のpickerを実装しようとしているのですがうまくいきません。
textfieldをタップした際に選択肢が表示されて選ぶ形になっています。一つ目に実装したyearについては正常に動作しています。しかし、pickerview2に関しては、tapをすると選択肢の内容がpickerview(year)のものになってしまいます。そのうちの一つの選択肢を選択してdoneを押すtextfieldに反映される内容はkalistの内容が表示されます。
つまり、選択肢にkalistが表示されずに困っています。表示に関する記述はfuncの部分だと思うのですがどのように改善するべきかわからずに困っています。
textfieldのka1をタップした際にkalistが表示されるようにする方法を教えていただけたら幸いです。よろしくお願いします。


class new: UIViewController,UINavigationControllerDelegate,UITextFieldDelegate, UIPickerViewDelegate, UIPickerViewDataSource,UITextViewDelegate {

    var list : [String] = [""]
    var yeass = ""
    var kalist : [String] = ["i","kkkkk","hfuytf","gtfytfty","eeeee"]

    let pickerView2 = UIPickerView()
    let pickerView = UIPickerView()

    @IBOutlet weak var ka1: UITextField!
    @IBOutlet weak var years: UITextField!    


    override func viewDidLoad() {
        super.viewDidLoad()

        let year9 = Calendar.current.component(.year, from: Date()) - 9
        let year8 = Calendar.current.component(.year, from: Date()) - 8
        let year7 = Calendar.current.component(.year, from: Date()) - 7
        let year6 = Calendar.current.component(.year, from: Date()) - 6

        let sNum9:String = String(year9)
        let sNum8:String = String(year8)
        let sNum7:String = String(year7)
        let sNum6:String = String(year6)
        list = [sNum9,sNum8,sNum7,sNum6]

        // ピッカー設定
        pickerView.delegate = self
        pickerView.dataSource = self

        pickerView2.delegate = self
        pickerView2.dataSource = self

        //初期値
        pickerView.selectRow(8, inComponent: 0, animated: false)

        pickerView2.selectRow(1, inComponent: 0, animated: false)


        // 決定バーの生成
        let 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)

        let toolbar2 = UIToolbar(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 35))
        let spacelItem2 = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil)
        let doneItem2 = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(done2))
        toolbar2.setItems([spacelItem2, doneItem2], animated: true)


        ka1.inputView = pickerView2
        ka1.inputAccessoryView = toolbar2
        // インプットビュー設定
        years.inputView = pickerView
        years.inputAccessoryView = toolbar

    }    

    @objc func done() {
        years.endEditing(true)
        years.text = "\(list[pickerView.selectedRow(inComponent: 0)])"
        yeass = "\(list[pickerView.selectedRow(inComponent: 0)])"

}

    @objc func done2() {
        ka1.endEditing(true)
        ka1.text = "\(kalist[pickerView3.selectedRow(inComponent: 0)])"
        ka1.text = "\(kalist[pickerView3.selectedRow(inComponent: 0)])"

        }

    func numberOfComponents2(in pickerView2: UIPickerView) -> Int {
        return 1
    }

    func pickerView2(_ pickerView2: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return kalist.count
    }

    func pickerView2(_ pickerView2: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return kalist[row]
    }

    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

    // ドラムロールの行数
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

        return list.count
    }

    // ドラムロールの各タイトル
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {

        return list[row]
    }
    }
0

1Answer

インスタンスに応じて処理を分けてください。

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    if pickerView == self.pickerView {
        ...
    } else if pickerView == pickerView2 {
        ...
    } else {
        ...
    }
}
0Like

Comments

  1. @engeng52821

    Questioner

    おかげさまで解決いたしました。本当にありがとうございました。

Your answer might help someone💌