Opt1: Вам нужно создать переменную внутри SetReasonViewController
vc
weak var delegate:RootVC?
Затем, когда она присутствует,
setReasonVc.delegate = self
после этого в viewDidLoad
из SetReasonViewController
pickerOptions.delegate = delegate
/**pickerOptions.dataSource = delegate**/ un comment to make `SetReasonViewController ` the dataSource
class RootVC:UIViewController,UIPickerViewDelegate {
//here implement didSelectRow
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
}
}
Opt2: Другой простой вариант - сделать
setReasonVc.loadViewIfNeeded()
setReasonVc.pickerOptions.delegate = self
Предупреждение вашего текущего кода
setReasonVc.pickerOptions.delegate = ???? // <- how to?
вызовет сбой, когда вы получите доступ к средству выбора до нагрузки vc, которая на данный момент равна нулю, поэтому setReasonVc.loadViewIfNeeded()
исправит ее
Редактировать:
class RootVC: UIViewController {
func myNavigate() {
let setReasonVc = self.storyboard?.instantiateViewController(withIdentifier: "setReasonVc") as! SetReasonViewController
setReasonVc.providesPresentationContextTransitionStyle = true
setReasonVc.definesPresentationContext = true
setReasonVc.modalTransitionStyle = UIModalTransitionStyle.crossDissolve
setReasonVc.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext
setReasonVc.callback = { (ind) in
print(ind)
}
self.present(setReasonVc, animated: true, completion: {})
}
}
class SetReasonViewController: UIViewController , UIPickerViewDelegate {
var callback:((Int)->())?
override func viewDidLoad() {
super.viewDidLoad()
pickerOptions.delegate = self
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
callback?(row)
}
}