【问题标题】:Linking a UIPickerView row title to a new view controller将 UIPickerView 行标题链接到新的视图控制器
【发布时间】:2019-07-02 17:03:07
【问题描述】:

我有一个 UIPickerView,其中有一些行,每行都有一个标题。我想要的是当单击一个标题时,一个特定于该标题的新视图控制器被链接到就像单击一个按钮将我带到一个新的 VC 一样。如何在选择器视图中使用行标题来做到这一点?

我正在尝试将特定行拖到视图控制器中,但整个选择器都被选中了。

【问题讨论】:

    标签: ios swift uipickerview


    【解决方案1】:

    你可以设置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))
        }
    }
    

    【讨论】:

    • 最好提供描述。仅代码的答案没有那么有用。
    • 好的。谢谢:tada:
    【解决方案2】:
    @IBOutlet weak var myPickerView: UIPickerView!
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        performSegue(withIdentifier: "segue\(row)", sender: nil)
    }
    

    从您的视图中拖动 segues,而不是从 pickerView 中拖动

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 2012-06-01
      • 2012-09-07
      • 2012-01-02
      • 2019-11-08
      相关资源
      最近更新 更多