在视图层次结构

时间:2017-05-10 12:41:30

标签: swift xcode uiviewcontroller structure code-readability

我想知道如何在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

这种方法的问题在于,您确实需要了解视图的层次结构,您必须依赖它,如果您稍微更改了层次结构,则需要更改它。

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

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

1 个答案:

答案 0 :(得分:1)

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

在该解决方案中,tabOne不知道它位于选项卡控制器中 - 它只是调用其委托方法。标签控制器可以执行任何必要的操作。