Связывание заголовка строки UIPickerView с новым контроллером представления - PullRequest
0 голосов
/ 02 июля 2019

У меня есть UIPickerView с несколькими строками, каждая из которых имеет заголовок. Что я хочу, так это когда один человек нажимает на заголовок, новый контроллер представления, специфичный для этого заголовка, связан с тем, как нажатие кнопки переводит меня в новый виртуальный канал. Как я могу сделать это с заголовком строки в окне выбора?

Я пытаюсь перетащить определенную строку в контроллер представления, но весь сборщик выбран.

Ответы [ 2 ]

1 голос
/ 02 июля 2019

Вы можете установить делегат pickerView и после нажатия viewController

Пример кода:

class ViewController: UIViewController {

    @IBOutlet private weak var pickerView: UIPickerView!

    struct PickerData {
        let viewControllerId: String
        let storyboardId: String
        let title: String
    }

    private var pickersData: [PickerData] = []

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

    private func loadData() {
        pickersData.append(
            ViewController.PickerData(viewControllerId: "ViewController1", storyboardId: "Main", title: "Foo")
        )
        pickersData.append(
            ViewController.PickerData(viewControllerId: "ViewController1", storyboardId: "Main", title: "Bar")
        )

    }

    private func createViewController(from index: Int) -> UIViewController {
        let model = pickersData[index]
        let viewController = UIStoryboard(name: model.storyboardId, bundle: nil).instantiateViewController(withIdentifier: model.viewControllerId)
        return viewController
    }

    private func pushViewController(viewController: UIViewController) {
        // If Navigation
        navigationController?.pushViewController(viewController, animated: true)

        // If present
        //present(viewController, animated: true, completion: nil)
    }

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

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return pickersData.count
    }
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return pickersData[row].title
    }

}
extension ViewController: UIPickerViewDelegate {
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        pushViewController(viewController: createViewController(from: row))
    }
}
0 голосов
/ 02 июля 2019
@IBOutlet weak var myPickerView: UIPickerView!
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    performSegue(withIdentifier: "segue\(row)", sender: nil)
}

перетащите сегменты с вашего взгляда, а не с помощью pickerView

...