Откройте новую страницу контроллера представления в соответствии со значением, выбранным из UIPickerView (Swift 4) - PullRequest
0 голосов
/ 26 августа 2018

Я хотел бы добавить функцию в моем приложении, где пользователь должен выбрать категорию из UIPickerView, и после нажатия кнопки программа откроет представление, выбранное из категорий в UIPickerView.Например, если одна из выбранных опций в UIPickerView - «О странице», я хотел бы иметь программу, которая будет открывать «О странице» при нажатии кнопки.

Это то, чтоИнтерфейс выглядел бы так: enter image description here

Но вместо состояний - у меня были бы категории, я не уверен, как установить значения в UIPickerView и открыть определенные представления.

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

Если вы хотите создать вид средства выбора программно - что я рекомендую больше всего - это решение должно работать для вас:

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

надеюсь, что это работает и для вас;)

0 голосов
/ 26 августа 2018

Реализуйте метод 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
    }
}
...