gpt4 book ai didi

swift - 从呈现的 View Controller 访问呈现的 View Controller ?

转载 作者:可可西里 更新时间:2023-10-31 23:57:39 24 4
gpt4 key购买 nike

我有一个 View Controller (包含我的菜单)显示在另一个 View Controller (我的应用程序)之上。

我需要从呈现的 View Controller (我的菜单)访问呈现的 View Controller (在我的菜单下方),例如访问一些变量或使呈现的 View Controller 执行它的一个 segues。

但是,我只是不知道该怎么做。我知道“presentingViewController”和“presentedViewController”变量,但我没有成功使用它们。

有什么想法吗?

代码(来自提供的 VC,作为对引用窗口的 AppDelegate 的引用):

if let presentingViewController = self.appDelegate.window?.rootViewController?.presentingViewController {
presentingViewController.performSegue(withIdentifier: "nameOfMySegue", sender: self)
}

最佳答案

这里是使用委托(delegate)设计模式与呈现 View Controller 对话。

首先声明一个协议(protocol),该协议(protocol)列出了委托(delegate)应响应的所有变量和方法。

protocol SomeProtocol {

var someVariable : String {get set}

func doSomething()
}

下一步:使您的呈现 View Controller 符合协议(protocol)。将您的演示 VC 设置为代表

class MainVC: UIViewController, SomeProtocol {

var someVariable: String = ""

func doSomething() {
// Implementation of do
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Your code goes here.

if let destVC = segue.destination as? SubVC{
destVC.delegate = self
}
}

}

最后,当您准备好在呈现的 VC(委托(delegate))上调用方法时。

class SubVC: UIViewController {
var delegate : SomeProtocol?


func whenSomeEventHappens() {

// For eg : When a menu item is selected

// Set some Variable
delegate?.someVariable = "Some Value"

// Call a method on the deleate
delegate?.doSomething()
}

}

关于swift - 从呈现的 View Controller 访问呈现的 View Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43474872/

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