gpt4 book ai didi

swift - 弹出窗口关闭时如何在主视图 Controller 中快速运行代码

转载 作者:行者123 更新时间:2023-11-28 14:45:53 25 4
gpt4 key购买 nike

我目前正在编写我的第一个 swift 应用程序。目前有一个 View / View Controller 在应用程序运行时加载,还有一个弹出窗口绑定(bind)到单独的 View Controller (如:https://www.youtube.com/watch?v=S5i8n_bqblE)。当我关闭弹出窗口时,我想更新原始 View 中的一些内容并运行一些代码。但是, func viewDidLoad() 和 func viewDidAppear() 似乎都没有运行。而且我无法从弹出 View 中执行任何操作,因为我无法从中访问主视图 Controller 中的组件。我该怎么办?

弹出窗口是否“以模态方式呈现”是否有所不同?

最佳答案

我假设您有一个 MainViewController,您要从中呈现 PopupVC。您可以在此处使用委托(delegate)模式。
定义一个 PopupVCDelegate 如下

protocol PopupVCDelegate {
func popupDidDisappear()
}

在您的 PopupVC 中定义类型为 PopupVCDelegatedelegate 属性。并在closePopup方法中,调用委托(delegate)方法popupDidDisappear

class PopupVC: UIViewController {
public var delegate: PopupVCDelegate?

override func viewDidLoad() {
super.viewDidLoad()
}

@IBAction func closePopup(_ sender: Any) {
dismiss(animated: true, completion: nil)
delegate?.popupDidDisappear()
}
}

现在任何采用此delegate 的类都将能够在调用closePopup 时接收回调。因此,让您的 MainViewController 接受这个委托(delegate)。

class MainViewController: UIViewController, PopupVCDelegate {

override func viewDidLoad() {
super.viewDidLoad()
}

func showPopup() {
let popupViewController = //Instantiate your popup view controller
popupViewController.delegate = self
//present your popup
}

func popupDidDisappear() {
//This method will be called when the popup is closed
}
}

另一种方法是通过 NSNotificationCenterclosePopup 上触发通知,并在 MainViewController 中添加一个观察者来监听该通知。但不建议在这种情况下使用。

编辑

正如您所要求的 NSNotificationCenter 方法。请按照以下方式更改您的类(class)

class PopupVC: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()
}

@IBAction func closePopup(_ sender: Any) {
dismiss(animated: true, completion: nil)

NotificationCenter.default.post(name: NSNotification.Name("notificationClosedPopup"), object: nil)
}
}
class MainViewController: UIViewController, PopupVCDelegate {

override func viewDidLoad() {
super.viewDidLoad()

NotificationCenter.default.addObserver(self, selector: #selector(onPopupClosed), name: NSNotification.Name(rawValue: "notificationClosedPopup"), object: nil)
}

@objc func onPopupClosed() {
//This method will be called when the popup is closed
}

deinit {
NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: "notificationClosedPopup"), object: nil)
}
}

关于swift - 弹出窗口关闭时如何在主视图 Controller 中快速运行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50259336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com