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

根据从UIPickerView(Swift 4)中选择的值打开新的视图控制器页面,swift,button,uiviewcontroller,uipickerview,Swift,Button,Uiviewcontroller,Uipickerview,我想在我的应用程序中添加一个功能,用户必须从UIPickerView中选择一个类别,单击按钮后,程序将打开从UIPickerView中的类别中选择的视图。例如,如果UIPickerView上选择的选项之一是“关于页面”,我希望有一个程序可以在单击按钮后打开“关于页面” 这就是UI的外观 但是,我不知道如何在UIPickerView和打开特定视图中设置值,而不是状态-我将拥有类别。实现UIPickerViewDeleteGate方法,并为每个VC提供一个stroryboard标识符 var las

我想在我的应用程序中添加一个功能,用户必须从UIPickerView中选择一个类别,单击按钮后,程序将打开从UIPickerView中的类别中选择的视图。例如,如果UIPickerView上选择的选项之一是“关于页面”,我希望有一个程序可以在单击按钮后打开“关于页面”

这就是UI的外观


但是,我不知道如何在UIPickerView和打开特定视图中设置值,而不是状态-我将拥有类别。

实现
UIPickerViewDeleteGate
方法,并为每个VC提供一个stroryboard标识符

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
    }
}

实现
UIPickerViewDelegate
方法,并为每个VC提供一个stroryboard标识符

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
    }
}

如果您希望以编程方式创建选择器视图(我建议最多),此解决方案应该适合您:

类MyViewController:UIViewController、UIPickerViewDeleteGate、UIPickerViewDataSource{
让pickerView=UIPickerView()
让标题=[“视图1”、“视图2”]
重写func viewDidLoad(){
super.viewDidLoad()
view.backgroundColor=.white
pickerView.delegate=self
pickerView.dataSource=self
view.addSubview(pickerView)
}
func pickerView(pickerView:UIPickerView,numberOfRowsInComponent:Int)->Int{
返回2
}
func pickerView(pickerView:UIPickerView,titleForRow行:Int,forComponent组件:Int)->String{
返回标题[行]
}
func numberOfComponents(在pickerView:UIPickerView中)->Int{
返回1
}
func pickerView(pickerView:UIPickerView,didSelectRow行:Int,不完整组件:Int){
如果行==0{
让view1=viewController1()
self.present(视图1,动画:true,完成:nil)
}
如果行==1{
让view2=viewController2()
self.present(视图2,动画:true,完成:nil)
}
}
}
类viewController1:UIViewController{
重写func viewDidLoad(){
super.viewDidLoad()
view.backgroundColor=UIColor.white
}
}
类viewController2:UIViewController{
重写func viewDidLoad(){
super.viewDidLoad()
view.backgroundColor=UIColor.white
}

}
如果您希望以编程方式创建选择器视图(我建议最多),此解决方案应该适合您:

类MyViewController:UIViewController、UIPickerViewDeleteGate、UIPickerViewDataSource{
让pickerView=UIPickerView()
让标题=[“视图1”、“视图2”]
重写func viewDidLoad(){
super.viewDidLoad()
view.backgroundColor=.white
pickerView.delegate=self
pickerView.dataSource=self
view.addSubview(pickerView)
}
func pickerView(pickerView:UIPickerView,numberOfRowsInComponent:Int)->Int{
返回2
}
func pickerView(pickerView:UIPickerView,titleForRow行:Int,forComponent组件:Int)->String{
返回标题[行]
}
func numberOfComponents(在pickerView:UIPickerView中)->Int{
返回1
}
func pickerView(pickerView:UIPickerView,didSelectRow行:Int,不完整组件:Int){
如果行==0{
让view1=viewController1()
self.present(视图1,动画:true,完成:nil)
}
如果行==1{
让view2=viewController2()
self.present(视图2,动画:true,完成:nil)
}
}
}
类viewController1:UIViewController{
重写func viewDidLoad(){
super.viewDidLoad()
view.backgroundColor=UIColor.white
}
}
类viewController2:UIViewController{
重写func viewDidLoad(){
super.viewDidLoad()
view.backgroundColor=UIColor.white
}

}
或者,ID可以是序列标识符,用于
性能检查(带标识符:发送方:)
@vacawama yes将是op可以替代推送的另一种选择/present@Sh_Khan-非常感谢您的帮助-我想我理解代码-但我对UIPickerView的想法很陌生-请您帮助我实现UIPickerViewDeleteGate方法好吗?看,答案是,ID可以是要与
performsgue一起使用的序列标识符(withIdentifier:sender:)
@vacawama yes将是op可以替代推送的另一种选择/present@Sh_Khan-非常感谢您的帮助-我想我理解代码-但是我对UIPickerView的想法很陌生-您能帮我实现UIPickerViewDeleteGate方法吗,请?看,这是答案DIDSelectRow非常感谢-请解释为什么建议我以编程方式添加它,而不是使用故事板标识符?因为您对代码中发生的事情有更好的了解,并且使用代码可以比使用故事板更快地进行更改。如果你想找一份AppDeveloper的工作,这也更值得推荐,因为像Instagram和Facebook这样的大公司都在编写代码,而不是使用情节提要,因为对更多人来说,编写代码比在情节提要中每次更改都要容易。希望这能很好地解释它,非常感谢您-请您解释一下为什么建议我以编程方式添加它,而不是使用故事板标识符?因为您对代码中发生的事情有了更好的了解,并且使用代码可以比使用故事板更快地进行更改。如果你想得到更多,也更推荐