根据从 UIPickerView 选择的值打开新的视图控制器页面 (Swift 4)

Open new view controller page according to value chosen from UIPickerView (Swift 4)

我想在我的应用程序中添加一个功能,用户必须从 UIPickerView 中选择一个类别,然后单击按钮,程序将打开从 UI选择器视图。例如,如果在 UIPickerView 上选择的选项之一是 "About Page",我希望有一个程序可以在单击按钮时打开 "About Page"。

这就是 UI 的样子。

但不是状态 - 我会有类别,我不确定如何在 UIPickerView 中设置值并打开特定视图。

实施UIPickerViewDelegate方法并给每个VC一个故事板标识符

var lastId:String?

var ids = ["secondVC","thirdVC"] // picker data source and identifier names 

func pickerView(_ pickerView: UIPickerView, 
        didSelectRow row: Int, 
         inComponent component: Int) {
   lastId = ids[row]
}

@IBAction func goClicked(_ sender:UIButton) {
    if let id = lastId {
      let vc = storyboard.instantiateViewController(withIdentifier:id)!
      self.present(vc, animated: true, completion: nil) // or push
    }
    else {
      // select a vc alert
    }
}

如果您想以编程方式创建选取器视图(我最推荐这种方法),此解决方案应该适合您:

class MyViewController : UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
    
    let pickerView = UIPickerView()
    let titles = ["view1", "view2"]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        view.backgroundColor = .white
        
        pickerView.delegate = self
        pickerView.dataSource = self
        
        view.addSubview(pickerView)
    }
    
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return 2
    }
    
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return titles[row]
    }
    
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }
    
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        if row == 0 {
            let view1 = viewController1()
            self.present(view1, animated: true, completion: nil)
        }
        if row == 1 {
            let view2 = viewController2()
            self.present(view2, animated: true, completion: nil)
        }
    }
    
}

class viewController1 : UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        view.backgroundColor = UIColor.white
    }
}

class viewController2 : UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        view.backgroundColor = UIColor.white
    }
}

希望这对你也有用 ;)