2011-07-04 5 views
0

tabBarItemからpopOverをどのように表示できるのでしょうか? ...任意のアイデアを、私はポップオーバーを表示する5番目の項目を追加したいiPhone:tabBarItemからpopOverを表示

tabBarController = [[UITabBarController alloc] init]; 

searchSplitViewController = [[UISplitViewController alloc] init]; 
searchRoot = [[[EI_iPad_Home_Root_ViewController alloc] init] autorelease]; 
searchDetail = [[[EI_iPad_Home_Detail_ViewController alloc] init] autorelease]; 
searchRootNav = [[[EI_Navigation_ViewController alloc] initWithRootViewController:searchRoot]autorelease]; 
searchDetailNav = [[[EI_Navigation_ViewController alloc] initWithRootViewController:searchDetail] autorelease]; 
searchSplitViewController.viewControllers = [NSArray arrayWithObjects:searchRootNav, searchDetailNav, nil]; 
searchSplitViewController.delegate = searchDetail; 

favoritesSplitViewController = [[UISplitViewController alloc] init]; 
favoritesRoot = [[[EI_iPad_Favorites_Root_ViewController alloc] init] autorelease]; 
favoritesDetail = [[[EI_iPad_Favorites_GeneralDetail_ViewController alloc] init] autorelease]; 
favoritesRootNav = [[[EI_Navigation_ViewController alloc] initWithRootViewController:favoritesRoot]autorelease]; 
favoritesDetailNav = [[[EI_Navigation_ViewController alloc] initWithRootViewController:favoritesDetail] autorelease]; 
favoritesSplitViewController.viewControllers = [NSArray arrayWithObjects:favoritesRootNav, favoritesDetailNav, nil]; 
favoritesSplitViewController.delegate = favoritesDetail; 

agencySplitViewController = [[UISplitViewController alloc] init]; 
agencyRoot = [[[EI_iPad_Agency_Root_ViewController alloc] init] autorelease]; 
agencyDetail = [[[EI_iPad_Agency_GeneralDetail_ViewController alloc] init] autorelease]; 
agencyRootNav = [[[EI_Navigation_ViewController alloc] initWithRootViewController:agencyRoot]autorelease]; 
agencyDetailNav = [[[EI_Navigation_ViewController alloc] initWithRootViewController:agencyDetail] autorelease]; 
agencySplitViewController.viewControllers = [NSArray arrayWithObjects:agencyRootNav, agencyDetailNav, nil]; 
agencySplitViewController.delegate = agencyDetail; 

editoSplitViewController = [[UISplitViewController alloc] init]; 
editoRoot = [[[EI_iPad_News_Root_ViewController alloc] init] autorelease]; 
editoDetail = [[[EI_iPad_News_Detail_ViewController alloc] init] autorelease]; 
editoRootNav = [[[EI_Navigation_ViewController alloc] initWithRootViewController:editoRoot]autorelease]; 
editoDetailNav = [[[EI_Navigation_ViewController alloc] initWithRootViewController:editoDetail] autorelease]; 
editoSplitViewController.viewControllers = [NSArray arrayWithObjects:editoRootNav, editoDetailNav, nil]; 
editoSplitViewController.delegate = editoDetail; 

searchSplitViewController.tabBarItem.title = NSLocalizedString(@"TabBar_search_label",nil); 
searchSplitViewController.tabBarItem.image = [UIImage imageNamed:@"tabBar_search_icon.png"]; 

favoritesSplitViewController.tabBarItem.title = NSLocalizedString(@"TabBar_favorite_label",nil); 
favoritesSplitViewController.tabBarItem.image = [UIImage imageNamed:@"tabBar_favorite_icon.png"]; 

agencySplitViewController.tabBarItem.title = NSLocalizedString(@"TabBar_agencies_label",nil); 
agencySplitViewController.tabBarItem.image = [UIImage imageNamed:@"tabBar_agencies_icon.png"]; 

editoSplitViewController.tabBarItem.title = NSLocalizedString(@"TabBar_news_label",nil); 
editoSplitViewController.tabBarItem.image = [UIImage imageNamed:@"tabBar_news_icon.png"]; 

tabBarController.viewControllers = [NSArray arrayWithObjects:searchSplitViewController,favoritesSplitViewController,agencySplitViewController,editoSplitViewController,nil]; 
[window addSubview:[tabBarController view]]; 

:ここに は、私は私のtabBarControllerを管理する方法ですか?ありがとう

答えて

1

私UITabBarItemフレームを取得するために、私は75px幅であり、34pxだけ離間されている項目iPad上(iPhoneアイテムに、それはより簡単ですautorisizingWidthている)ことに気づきました。

だから私は実行します。

(tabBar.frame.size.width-((75*[tabBarController.items count])+(34*[tabBarController.items count]-1)))/2 

第1のフレキシブルsapce幅を取得します。 はその後、私が追加:

(75*indexOfItemToReach)+(34*(indexOfItemToReach-1))+(75/2) 

アイテムの幅中心を取得するには。

+0

Bejilに感謝します。私はこのソリューションがiPadにとって有益であると感じています。 – Jonats

0

これは、これがタブバーの予想される動作ではないので、これに対して助言します。ただし、UIPopoverControllerを作成し、presentPopoverFromRectを使用して表示することができます。

UIPopoverController *pop = [[UIPopoverController alloc] initWithContentViewController:someVC]; 

[pop presentPopoverFromRect:CGRectMake(100,100,100,100) permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
+0

ありがとう、これは私が最初にしたものですが、tabBarItemフレームには到達できません。私は正しいCGRectを得る方法を知らない – Bejil

0

タブバーの表示階層をクロールして、UIControlサブクラスを検索することができます(ランダムな順序で表示される可能性があるので、center.xが最も左に並ぶように並べ替える必要があります)。それぞれはタブバーのボタンであり、これには矩形があります。

このアプローチは、特にOSのアップグレードによってコードが破損した場合に、タブバーのframeを使用するだけの場合、App Storeで安全なコーディングの領域内にあるようです。

UIViewには、デバッグに非常に便利なrecursiveDescriptionという便利な文書化されていないメソッドがあります。たとえば、

(gdb) po [[[[[UIApplication sharedApplication] delegate] tabBarController] view] recursiveDescription] 
関連する問題