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

Posted

技术标签:

【中文标题】swift 4 中使用 performSegue 打开的关闭页面时,如何在视图控制器和 TableViewController 之间传递数据?【英文标题】:how pass data between view controller and TableViewController when using dismiss page that opened with performSegue in swift 4? 【发布时间】:2017-12-24 08:52:21 【问题描述】:

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

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

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

dismiss(animated: false, completion: nil)

现在我不能使用 perform segue 方法将文本字段文本传递给第一个视图控制器,我该如何在 swift4 中做到这一点?

【问题讨论】:

使用委托从 B->A 传递数据。 How to pass data to another controller on dismiss ViewController?的可能重复 有问题我的firstviewcontroller是tableviewcontroller不是view controller 没问题,tableviewcontroller是UIViewController的子类 好的,那么在那个问题中,我应该在视图控制器或表视图控制器中的哪里编写协议? 【参考方案1】:

添加到你的 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

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

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

【讨论】:

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

Swift performSegue 未执行 [重复]

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

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

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

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

self.performSegue 找不到storyboard-segue-ID,即使它已被命名