swift - 如何获取导航控制器的父序列的引用?
问题描述
你好,
我实际上正在开发一个带有配置故事板的应用程序,所以我需要使用Navigation Controller。但在此之前,我有一个名为A的视图控制器,带有一个与我的Navigation Controller相连的按钮。在我的情况下,我想从我的Navigation Controller中的View Controller获取对我的View Controller A的引用。我尝试在导航控制器的视图控制器中执行此操作以获取对视图控制器 A 的引用:
ViewControllerA().myFunc
但这不起作用。我知道引用不好,因为我重新创建了 ViewControllerA 的新实例。有人有一个很好的解决方案来引用我的 View Controller 吗?
你也可以在这里下载我的 Xcode 项目
提前致谢。
解决方案
为 viewControllerB 定义委托协议并将 viewControllerA 设置为它的委托
protocole ViewControllerBDelegate {
func myFunc()
}
class ViewControllerB : UIViewController {
@IBOutlet var myDelegate : ViewControllerBDelegate? // set the connection to viewControllerA in storyboard
func someFunctionThatCallDelegate() {
myDelegate?.myFunc() // Call the delegate which in your case will be viewControllerA
}
...
class ViewControllerA : UIViewController, ViewControllerBDelegate {
func myFunc() {
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let identifier = segue.identifier {
if (identifier == "showingB") { // use identifier of segue set in storyboard
if let vc = segue.destination as? ViewControllerB {
vc.delegate = self // set viewControllerA as delegate for viewControllerB
}
}
}
}
}
推荐阅读
- matlab - 保存前让Ctrl+S跳出功能
- javascript - 如何使用 JavaScript/jQuery 将单独的 thead 和 tbody 合并到一个表中
- titanium - 如何将我在 appcelerator-titanium 中的应用程序中的银行卡详细信息提供给 Google Pay 和 Apple Pay
- python - Django orm 选择前三个单词不同的字段
- android - 问题:违反来自谷歌控制台的权限政策
- typescript - type assert 无法编译~(like val_a as val_b)
- python - 获取具有一对多关系的数据的正确方法是什么
- c# - ASP.NET Razor 中的简单 SQL 查询
- vb.net - 如何通过数据表检查连续列数?
- ruby-on-rails - 同一个模型的多个 has_one 关系