如何将协议与导航控制器结合使用?

How can I use a protocol in combination with a navigation controller?

大家好,我有一个小问题。如何将协议与导航控制器结合使用。首先是我的两个 类:

第一个视图控制器:

class VC1: UIViewController{

var cons = "nothing"

@IBAction func PRINT(_ sender: Any) {
    print(cons)
}

@IBAction func PRESENT(_ sender: Any) {
    let VC = storyboard?.instantiateViewController(identifier: "VC") as! VC2
    VC.delegate = self
    present(VC, animated: true, completion: nil)
}  }

extension VC1: data {
func give(text: String) {
    cons = text
} }

第二个视图控制器:

protocol data {
func give(text: String)}

class VC2: UIViewController {

var delegate: data!

@IBAction func SAVEDISMISS(_ sender: Any) {
    delegate.give(text: "Hallo")
    dismiss(animated: true, completion: nil)
}}

这也是我的故事板: enter image description here

那么现在我来谈谈我的问题。当我 运行 代码在 VC2 上执行任何 segue 时出现错误消息,因为通过使用协议,导航控制器被排除在外,但是当我呈现导航控制器而不是 VC2 时,协议不再工作.

我可以做些什么来排除导航控制器并且协议同时工作。

希望有人能帮助我,再次抱歉我的英语不好。我希望你能明白一切。

祝你白天或晚上愉快。

当您尝试呈现 UINavigationController.

时,将 PRESENT 函数替换为以下代码
@IBAction func PRESENT(_ sender: Any) {
    let VC = storyboard?.instantiateViewController(identifier: "VC") as! VC2
    VC.delegate = self
    let navigationController = UINavigationController(rootViewController: VC)
    present(navigationController, animated: true, completion: nil)
}