在视图层次结构中查找元素的最佳方法

Best way to find the element in view hierarchy

我想知道您如何导航到 UIViewController 堆栈中的更高级别的视图,如果您需要更改它们。

一个例子是如果你有 TabViewController 并且你需要在选项卡之间进行通信,但这不是唯一的情况。

我现在做的是这样的

let tabOne = self.tabBarController?.childViewControllers.first?.childViewControllers.first as? tabOneController

let topController = ((self.viewControllers[0] as! RootViewController).viewControllers![0] as! UINavigationController).topViewController as? MySpecialViewController

这种方法的问题是你真的需要知道视图的层次结构,你必须依赖它,如果你稍微改变层次结构就需要改变它。

第二个问题是,如果您在团队中工作,那么这段代码非常令人沮丧,而且对于其他团队成员而言描述性不够。

我的问题是,什么是正确的方法/最佳实践,或者:你是怎么做到的?

iOS 中一个非常常见的习惯用法是让选项卡控制器提供一个委托接口,并让顶级控制器向它传递一个实现。一种简单的方法是让顶层控制器实际自己实现它。

在那个解决方案中,tabOne 不知道它在选项卡控制器中——它只是调用它的委托方法。选项卡控制器会做任何必要的事情。