从另一个被关闭的 vc 访问 viewcontroller 时的运行方法

Posted

技术标签:

【中文标题】从另一个被关闭的 vc 访问 viewcontroller 时的运行方法【英文标题】:Run method when viewcontroller is accessed from another vc being dismissed 【发布时间】:2018-07-11 05:15:30 【问题描述】:

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

[VC1] -> [VC2]

【问题讨论】:

使用委托方法。如果您对此不了解,请参考:medium.com/@jamesrochabrun/… 在 viewWillAppear 中调用该方法,而不是在 viewDidLoad 中调用 除了@chandra1234你还可以使用unwindToSegue 【参考方案1】:

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

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

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

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

然后在 VC2 的 storyboard 中选择 unwindSegue 并命名:

现在在您解除 VC2 的方法中,只需添加:

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

在 VC1 中: VC2 的委托和在类或扩展中的 VC1 控制器

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

在 VC2 中: 添加VC1的协议并使Protocol的对象委托然后其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()
        
      

【讨论】:

以上是关于从另一个被关闭的 vc 访问 viewcontroller 时的运行方法的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有任何推送序列的情况下快速从另一个视图控制器访问方法?

当 VC 从另一个 VC 返回时,如何清除 UITableVIew 中的所有检查?

在vc中,用fclose关闭一个文件后,再直接读取文件,显示文件正在运行,请高手指点?

从另一个导航控制器弹出视图控制器到另一个视图控制器

从另一个 modalviewcontroller 呈现 ModalViewcontroller

Cocoa:从另一个窗口创建并关闭一个窗口