ios - 最佳实践 : Accessing instance of UIViewController from another in iOS

标签 ios

我有一个导航 Controller ,堆栈上有 4 个 View Controller 。我需要从 ViewController4 访问 ViewController1 中的一个函数。执行此操作的正确方法是什么?

  1. 我是否通过 ViewController2 和 3 传递对 ViewController1 的引用,然后使用协议(protocol)委托(delegate)访问函数?

  2. 我是否将对 ViewController1 的引用存储在结构中然后从那里访问它?

第二个是我目前正在做的事情。我在离开 ViewController1 时设置引用,然后在完成时将该引用设置回 nil。

为什么我需要这样做:

VC1 有一个包含一堆项目的 TableView 。这些项目中的数据是在 VC4 中编辑的。在 VC4 中完成编辑后,我想保存、弹出到根目录,然后用新数据重新加载 TableView 。

最佳答案

你的计划全错了。您应该做的是拥有一个数据模型,可以发布有关其数据更改的通知。 View Controller 之间不应该有任何链接。 VC1 应该准备好监听来自数据模型的通知。当 VC4 更新数据模型时,数据模型会告诉正在监听的任何人它已更新。

通过这种设置,任何数量的 View Controller 都可以监听正在传递的数据模型的同一个实例。您应用程序的任何部分都可以根据需要响应这些通知。这种设计的最佳部分是,除了每个人都知道数据模型之外,没有任何类对任何其他特定类有任何了解。

数据模型不知道任何 Controller 或 View 。

除了需要呈现另一个 Controller 之外,没有 Controller 与其他 Controller 有任何直接链接。

关于ios - 最佳实践 : Accessing instance of UIViewController from another in iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42988244/

相关文章:

ios - 如何将我的设备 token (NSData) 转换为 NSString?

iOS11 - Realm 框架未构建

ios - 如何知道蓝牙设备连接/断开状态回调到后台运行的iOS应用程序?

ios - 记录更新的 CloudKit 推送通知停止工作

ios - 使用 CommonCrypto 的 NSString 类别在 RubyMotion 中返回 nil

ios - 我可以将选项卡 View Controller 嵌入到容器 View 中吗?

ios - App Store Connect分发选项(是否需要?)

ios - 找不到有效的 GoogleService-info.plist

ios - 当我将它添加到我的项目时,cocoapods 链接器错误

ios - 如何以编程方式在 Swift 中的图像上添加渐变层?