2017-05-10 76 views
1

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

問題這種方法是,你真的需要知道視圖的層次,你havely依賴於它,如果您稍微更改層次結構,則需要更改它。

第二個問題是,如果你在一個團隊中工作,那麼這段代碼對於其他團隊成員來說是非常令人沮喪的,而且沒有足夠的描述性。

我的問題是,什麼是正確的方法/最佳實踐,或者:你如何做到這一點?

回答

1

iOS中非常常見的習慣用法是爲tab控制器提供一個委託接口,併爲頂層控制器傳遞一個實現。一個簡單的方法是讓頂層控制器自己實現它。

在這個解決方案中,tabOne並不知道它在tab控制器中 - 它只是調用它的委託方法。選項卡控制器可以做任何必要的操作

相關問題