-4

私のシナリオでは、UIPickerViewswift を使用してボタン タイトルに表示するピッカー データを開いて選択するためのボタン クリックを作成しようとしています。ここToolbarでも、pickerview コントローラーに追加したいと思います。

 let button = UIButton(type: .custom)
  button.setTitle("",for: .normal)
  button.frame = CGRect(x: CGFloat(amount_textfield.frame.size.width - 9), y: CGFloat(5), width: CGFloat(9), height: CGFloat(20))
  button.addTarget(self, action: #selector(self.refresh), for: .touchUpInside)
  amount_textfield.leftView = button
  amount_textfield.leftViewMode = .always

 @IBAction func refresh(_ sender: Any) {
    // Here, I need to execute picker view 
 }
4

1 に答える 1

0

従う必要があるいくつかの手順があります。

  1. 最初に非表示を作成し、そのおよびUIPickerViewを設定しますdelegatedataSource

    @IBOutlet weak var pickerView: UIPickerView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        pickerView.delegate = self
        pickerView.dataSource = self
    }
    
  2. このピッカー ビューに使用するデータ ソース配列を用意する

    class ViewController: UIViewController {
        var array = [String]()
    }
    
    extension ViewController: UIPickerViewDelegate, UIPickerViewDataSource {
        func numberOfComponents(in pickerView: UIPickerView) -> Int {
            return 1
        }
        func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
            return array.count
        }
        func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
            return array[row]
        }
    }
    
  3. ボタンが押されたときにピッカー ビューを再表示する

    pickerView.isHidden = false
    
  4. ピッカー ビューのデリゲート メソッドを統合しますpickerView(_:didSelectRow:inComponent:)。行が選択されている場合、ボタンのタイトルを、選択したインデックスのデータ ソース配列の要素として設定しますrow

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        button.setTitle(array[row], for: .normal)
    }
    
  5. オプション: ピッカー ビューを非表示にする

    pickerView.isHidden = true
    
于 2019-03-05T10:59:30.380 に答える