我有 2 個 VC,它們之間有一個導航控制器。如何將第一個螢屏設定為第二個的代表?
我試過的:
- 從第一次展示 SecondVC(它在沒有導航的情況下展示它)
- 在 NavVC viewDidLoad() 中設定委托
第一VC:
class MainVC: UIViewController, SecondVCDelegate {
func passData(text: String) {
// do stuff
}
@IBAction func openNextVC(_ sender: Any) {
let nextVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "NavVC") as! NavVC
present(nextVC, animated: true, completion: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
導航控制器:
class NavVC: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
第二VC:
protocol SecondVCDelegate {
func passData(text: String)
}
class SecondVC: UIViewController {
var delegate: SecondVCDelegate?
@IBAction func save(_ sender: Any) {
// do stuff
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
uj5u.com熱心網友回復:
這里的主要任務是從導航控制器實體(navC)訪問第二個視圖控制器實體。為此,您必須首先從導航控制器實體(nextVC)訪問 rootViewController,如下所示:
let nextVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "NavVC") as! NavVC
let secondVC = nextVC?.viewControllers.first as? SecondVC
secondVC.delegate = self
present(nextVC, animated: true, completion: nil)
當第二個視圖控制器是導航控制器的根時,上述代碼適用。如果第二個視圖控制器不是 navC 的根控制器,那么您必須迭代控制器以獲取第二個視圖控制器實體。一旦有第二個控制器實體,您就可以將委托分配給如下所示的相同。
for controller in navC.viewControllers {
if controller.isKind(of: SecondVC.self) {
if let secondVc = controller as? SecondVC {
secondVc.delegate = self
}
break
}
}
uj5u.com熱心網友回復:
我處理了同樣的事情。在 MainVC 上試試這個:
class MainVC: UIViewController, SecondVCDelegate {
func passData(text: String) {
// do stuff
}
@IBAction func openNextVC(_ sender: Any) {
guard let secondController = self.storyboard?.instantiateViewController(withIdentifier: "AddGroupVC") as? AddGroupVC else { return }
secondController.delegate = { [weak self] in
print("call your delegates here")
}
self.navigationController?.present(secondController, animated: true, completion: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
在第二個視圖控制器上,呼叫viewWillDisappear 中的委托:
class SecondVC: UIViewController {
var delegate: SecondVCDelegate?
@IBAction func save(_ sender: Any) {
// do stuff
self.dismiss(animated: true, completion: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillDisappear(_ animated: Bool) {
self.delegate
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/396579.html
上一篇:堆疊視圖因約束而離開螢屏
