2010-12-08 58 views
6

我正在自定義應用的UITabBarController中的「更多」視圖。自定義UITabBarController的moreNavigationController

從我在文檔中看到的,對定製它有寶貴的支持。 UITabBarController只有一個名爲'moreNavigationController'的只讀屬性指向一個UINavigationController。

這使我們至少可以自定義它的UINavigationBar。定製它在第一個視圖控制器中呈現的表格視圖有點棘手。

關於SO和其他地方的其他問題,我已經看到所有的討論圍繞着與更多的導航控制器的內部結構相關(例如觀察堆棧中的第一個視圖控制器是UITableViewController,將其數據交換出來控制器等)。問題在於,所有這些方法都會假設API中的非文檔代碼的行爲如何,這些假設幾乎不會面向未來。

我在這裏看到的唯一選擇是滾動我自己的自定義「更多控制器」(可選地削減編輯功能以保持實現相當簡單)並將其用作選項卡中的第五個視圖控制器。當然,必須注意將後續視圖控制器直接分配給自定義「更多控制器」而不是直接分配給UITabBarController(可能需要對UITabBarController進行子分類以強制執行此規則)。

你會選擇哪種方法?你會建議什麼其他解決方案?

回答

4

我會選擇推出自己的定製控制器爲3個原因:

  1. moreViewControllerUIKit控制。在外部,很難定製一些視圖並直接控制它們。 moreViewController中會有不可預測的方法和圖層定義。它不可能是基本的UITableViewController。我認爲定製具有委託的類更有效率。

  2. 如果您自定義moreViewController,則每次Apple發佈新iOS時都可能需要發佈新版本的應用程序。蘋果公司的moreViewController開發人員可能會將整個課程改爲其他課程。所以你的應用程序將停止響應。

  3. 我自己的班級,我自己的家。我可以做任何我想做的事。

4
UIViewController *tbMore = 
    ((UIViewController*) 
    [self.moreNavigationController.viewControllers objectAtIndex:0]); 

int nRows = [((UITableView *)tbMore.view) numberOfRowsInSection:0]; 

for (int i = 0; i < nRows; i++) 
{ 
    UITableViewCell *c = 
     [((UITableView *)tbMore.view) 
     cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]]; 

    // Do any additional customization here! 
} 
相關問題