当从另一个 vc 访问 viewcontroller 时 运行 方法被解雇

Run method when viewcontroller is accessed from another vc being dismissed

假设我有一个名为 VC1 的初始 vc,然后我有一个名为 VC2 的第二个。 VC1 有一个 VC2 的 segue,在 VC2 上有一个按钮可以关闭 VC2,然后显示 VC1。加载 VC1 后,我想 运行 一个方法,但我不能这样做,因为确实加载了,所以我可以在哪里做?

[VC1] -> [VC2]

您可以使用委托方法来实现这一点。在您调用以关闭 VC2 的方法中调用委托。您可以在 VC1 中实现此委托。

在 VC1 中: Class 或扩展

中的 VC2 和 VC1 控制器的委托

将委托方法添加到 VC1 中,该方法将在关闭 VC2 后调用

在 VC2 中: 添加 VC1 的协议并使 Protocol delegate 的对象然后它的 segue 退出它转到 VC1 Delegate 方法。

示例:

VC1:

extension VC1, myCustomVC2Delegate {
    func didCloseDelegate() {
        // Your function or method Called here
    }
}

VC2:

protocol myCustomVC2Delegate {
    func didCloseDelegate()
}
import UIKit

class VC2: UIViewController {

    var delegate: myCustomVC2Delegate?

    @IBAction func onTapGotoVC1(_ sender: AnyObject) {
        self.performSegue(withIdentifier: "gotoVC1", sender: self)
    }


    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        if segue.identifier == "gotoVC1" {
           if self.delegate != nil {
            self.delegate?.didCloseDelegate()
        }
     } 
}

您也可以尝试 Unwind Segue 关闭 VC2 和 VC1 中的调用方法。它非常简单并且需要更少的编码。

在您的 VC1 中添加以下方法:

@IBAction func unwindToVC1(segue:UIStoryboardSegue){
    print("Hello")
}

storyboard 中右键单击 VC1 的 Exit icon 并将一个 segue 连接到 VC2:

然后在 storyboard in VC2 select 中将 unwindSegue 命名为:

现在在您关闭 VC2 的方法中只需添加:

performSegue(withIdentifier: "dismissSegue", sender: self)

您还可以将数据从 VC2 传递到 VC1。