当使用在swift 4中使用performSegue打开的dismiss页面时,如何在视图控制器和TableViewController之间传递数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当使用在swift 4中使用performSegue打开的dismiss页面时,如何在视图控制器和TableViewController之间传递数据?相关的知识,希望对你有一定的参考价值。

我在这里使用此代码将数据从第一个视图控制器传递到第二个视图控制器

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let vc = segue.destination as? secondViewController {
        vc.showPageType = self.checkEdit
   }

但问题是在第二个视图控制器中我有文本字段,当用户填写该文本字段并按下按钮提交时,第二个ViewController将被解除此方法

dismiss(animated: false, completion: nil)

现在我不能使用执行segue方法将文本字段文本传递给第一个视图控制器如何在swift4中执行此操作?

答案

添加到您的secondViewController源代码文件:

protocol SecondViewControllerDelegate {

    func submitButtonPushedWithText(_ text: String)
}

添加到类secondViewController属性:

var delegate: SecondViewControllerDelegate?

然后将第一个控制器符合SecondViewControllerDelegate并实现方法submitButtonPushedWithText(:):

class FirstViewController: UIViewController, SecondViewControllerDelegate {

    func submitButtonPushedWithText(_ text: String) {
        // use text from textField of second controller 
    }
}

在呈现之前还要设置第二个控制器的委托属性:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let vc = segue.destination as? secondViewController {
    vc.showPageType = self.checkEdit
    // setup delegate
    vc.delegate = self
}

现在,您可以在调用dismiss之前调用第二个控制器中的方法submitButtonPushedWithText(_ text:String)(animated:false,completion:nil):

func submitButtonPushed() {
    delegate?.submitButtonPushedWithText(textField.text!)
    dismiss(animated: false, completion: nil)
}

以上是关于当使用在swift 4中使用performSegue打开的dismiss页面时,如何在视图控制器和TableViewController之间传递数据?的主要内容,如果未能解决你的问题,请参考以下文章

Swift performSegue 未执行 [重复]

来自appDelegate performSegue的Swift 3在谷歌登录后无法正常工作

self.performSegue(withIdentifier: "teacherDetail", sender: self) 需要点击两次

Swift 3:PerformSegue WithIdentifier 不显示视图控制器,没有错误

没有 performSegue 的委托不会被调用 Swift 5

使用 performSegue 显示 navigationController