簡體   English   中英

自定義UITabBarController的moreNavigationController

[英]Customizing UITabBarController's moreNavigationController

我正在我的應用程序的UITabBarController中自定義“更多”視圖。

從我在文檔中看到的內容來看,很少有人支持自定義它。 UITabBarController只有一個名為'moreNavigationController'的只讀屬性,它指向UINavigationController。

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

關於SO和其他地方的其他問題,我已經看到所有的討論圍繞着搞亂moreNavigationController的內部結構(例如,觀察堆棧中的第一個視圖控制器是UITableViewController,交換它的數據控制器等等)。 )。 問題是所有這些方法都假設API中未記錄的代碼如何表現,這些假設很難面向未來。

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

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

我會選擇推出自己的自定義控制器有三個原因:

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

  2. 如果您自定義moreViewController ,則每次Apple發布新iOS時,您可能必須發布新版本的應用程序。 Apple的moreViewController的開發人員可能會將整個類更改為其他類。 所以你的應用程序將停止響應。

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

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!
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM