我想知道如何在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
这种方法的问题在于,您确实需要了解视图的层次结构,您必须依赖它,如果您稍微更改了层次结构,则需要更改它。
第二个问题是,如果您在团队中工作,则此代码非常令人沮丧,而且对其他团队成员而言描述性不够。
我的问题是,什么是正确的方法/最佳实践,或者:你是如何做到的?
答案 0 :(得分:1)
iOS中一个非常常见的习惯用语是选项卡控制器提供委托接口,顶级控制器为其传递实现。一种简单的方法是让顶级控制器实际实现它。
在该解决方案中,tabOne不知道它位于选项卡控制器中 - 它只是调用其委托方法。标签控制器可以执行任何必要的操作。