Как я могу подтвердить свой выбор в UIPickerView с помощью кнопки Готово? - PullRequest
0 голосов
/ 23 марта 2020

Я прошу прощения за этот вопрос, другие вопросы либо устарели, либо касаются встраивания кнопок в UIPickerView

У меня есть UIPickerView, который отображает 3 строки; как только мой пользователь выбрал строку, которую он хочет выбрать, я хочу, чтобы он нажал кнопку «Готово» (которая не встроена в сам UIPickerView; но отображается отдельно).

let strings = ["1", "2", "3"]

fileprivate let pickerView: UIPickerView = {
       let pv = UIPickerView()
        pv.translatesAutoresizingMaskIntoConstraints = false
        return pv
    }()

override func viewDidLoad() {
pickerView.delegate = self
pickerView.dataSource = self

}

    let button: UIButton = {
        let btn = UIButton()
        btn.translatesAutoresizingMaskIntoConstraints = false
        btn.setTitle("Done", for: .normal)
        btn.addTarget(self, action: #selector(donePressed), for: .touchUpInside)
        return btn
    }()
    @objc func donePressed(_ sender: UIButton) {
        print("Done pressed")
        //Pressing this should print whichever row is currently selected
    }

extension ViewController: UIPickerViewDataSource {

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

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



}

extension ViewController: UIPickerViewDelegate {


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

Ответы [ 2 ]

0 голосов
/ 23 марта 2020
@objc func donePressed(_ sender: UIButton) {
        print("Done pressed")
        print(strings[pickerView!.selectedRow(inComponent: 0)])
}
0 голосов
/ 23 марта 2020

Начните с поиска чего-нибудь полезного в документации. Ах, вот оно:

https://developer.apple.com/documentation/uikit/uipickerview/1614369-selectedrow

Итак. Пусть ваша кнопка вызовет режим выбора selectedRow(inComponent:). Есть только один компонент, поэтому вы передадите 0. Возвращаемое значение - index (выбранная строка). Используйте это в качестве индекса в strings, если вы хотите узнать фактическое значение (строка).

...