2011-10-18 15 views
4

UIMoreListControllerの子であるView Controllerを取得するための正当なAPIがあるかどうか不思議ですか? (UIMoreListControllerはUIMoreNavigationControllerのビュースタックの上部の子である。UIMoreNavigationControllerはUITabBarControllermoreNavigationControllerプロパティによってオブジェクト指し示される。)UIMoreListController(プライベートフレームワーククラス)の子ビューコントローラを取得する方法は?

言い換えれば、私はUITabBarControllerを有し、私は配列を設定する場合その上に6つのビュー・コントローラ、ビュー階層は、実際に(それが実際にビューの階層だ、コントローラを表示していないが、これらの識別子を使用すると、より多くの意味を成して)次のようになります。これを行うには

+ UITabBarController <-- has five tabs 
|--- view controller  <-- these are my own view controllers 
|--- view controller 
|--- view controller 
|--- view controller 
|--+ UIMoreNavigationController <-- root view controller of fifth tab 
    |--+ UIMoreListController <-- table-based view shown on fifth tab 
     |--- view controller  <-- these are my own view controllers 
     |--- view controller 

一つの方法は、単純にありますUITabBarControllerのviewControllersプロパティからView Controllerを取得し、5以上があるかどうかを確認し、ret 5より大きい場合、すべてのView Controllerをインデックス5からN - 1に変更します(5未満の場合、View ControllerはUIMoreNavigationControllerの子になりません)。

ただし、ハードコーディングを避けたいのですがmoreNavigationControllerの残りのコントローラをリストする前にUITabBarControllerが表示するビューコントローラの数についての仮定。 Appleは将来的にこの数字を変更する可能性があります。しかし、UITabBarControllerまたはこれらの子にアクセスするためのUINavigationController上でAPIを見つけることはできません。また、UIMoreNavigationControllerはパブリッククラスではないため、そのクラスに公開されているメソッドに依存することはできません。

答えて

2

これを達成するための実際のAPIはまだ見つかりませんでした。ただし、UIUserInterfaceIdiomをチェックし、最大5または8個のタブがあると仮定して前提条件を設定することなく行うことができます。

  1. タブバーの項目数を取得します。 UITabBarController.tabBar.itemsには、そのようなタブバー項目がある場合、moreNavigationControllerのタブバー項目が含まれます。
  2. UITabBarController内のビューコントローラの数を数えます。 UITabBarController内にタブバー項目より多くのビューコントローラがある場合、最後のタブバー項目はmoreNavigationControllerを表します。
  3. したがって、moreNavigationControllerのアカウントになるように、タブバーの項目数を減らして、それはmoreNavigationControllerの最初の子のインデックスで、UITabBarController.viewControllersになります。

あるいは、コード内:

NSUInteger tabCount = [tabBarController.tabBar.items count]; 
NSUInteger vcCount = [tabBarController.viewControllers count]; 
NSUInteger idx = (vcCount > tabCount) ? tabCount - 1 : 0; 
NSIndexSet *is = [NSIndexSet indexSetWithRange:NSMakeRange(idx, vcCount - idx)]; 
NSArray *moreControllers = [tabBarController.viewControllers objectsAtIndexes:is]; 
+0

私は唯一の5つのタブがshowableているiPhone、上tabBarController.tabBar.items.countの== 7を取得します。私はこれがうまくいくとは思わない。 –

+0

タブバーにはn個のビューコントローラがあります。 7人は大丈夫です。そのタブバー上のビューコントローラを数えれば、おそらく8になります。 –

+0

答えは「正しい」とマークされていません。 – erikprice

関連する問題