2011-09-07 57 views
0

我不打算說這是以任何方式好設計。我有點繼承現有的東西。無論如何,有一個TabController。一個這個標籤,有兩個視圖根據UISegmentController按需加載。這兩個ViewController都是另一個具有我需要的方法的ViewController的子類。在iPhone中查看層級問題

當我在TabController中時,我想創建一個方法,使用兩個ViewControllers的一些超類方法。按需加載後,如何訪問該選項卡的當前ViewController?我是否需要引用基本控制器類型,並在需要時加載時將其設置爲當前視圖控制器?謝謝。

回答

0

要獲得顯示在屏幕上的活動選項卡,您可以使用[self.tabBarController selectedViewController],它會給你一個UIViewController參考。如果你要使用的方法,那麼你可以將它轉換爲你的ViewController超類,然後調用它的方法就像這樣(其中self.tabBarController是你的標籤欄控制器):

MySuperClassViewController *viewC = (MySuperClassViewController *)[self.tabBarController selectedViewController]; 
[viewC someMethodDeclaredHere]; 
0

首先,術語的一點點清除發現一些潛在的困惑:我假定你的意思是控制各種視圖控制器的UITabBarController。此外,看起來你使用的是UISegmentedControl,它是而不是的視圖控制器,但是UIView的子類。我希望這些只是錯別字而不是概念問題。

對於「當我在選項卡控制器中」的含義,仍然存在一些含糊不清的含義。我假設你想把代碼放入表示UITabBarController的類中。但爲什麼?只需將這些方法放入適當的視圖控制器中,或者如果它是之前必須完成的任務,則將其放入您的應用程序委託中。但是,如果這些方法在視圖控制器超類中,它們應該與該視圖控制器所需的邏輯有關。

如果您需要其他方法,即在您的視圖控制器之外,請考慮創建一個單獨的#include文件並將方法放在那裏。或者,您可以使用可通過[[UIApplication sharedApplication] delegate]方便訪問的應用程序代理。