当从另一个 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。
假设我有一个名为 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。