2011-07-04 44 views
0

我不知道如何從tabBarItem顯示popOver? 這裏是我如何管理我的tabBarController: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]]; 

我想補充,這將顯示酥料餅第五項...任何想法?謝謝

回答

1

爲了讓我UITabBarItem幀我注意到,在iPad(iPhone上的項目是autorisizingWidth它更簡單)項目是960x75像素的寬度和34像素間隔。

所以我做的:

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

拿到第一柔性sapce寬度。 然後我添加:

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

獲得項目的寬度中心。

+0

謝謝貝吉爾。我發現這個解決方案對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子類(它們可能以隨機順序出現,因此您需要根據最左邊的哪個排序它們)。每一個都是一個標籤欄按鈕,它將有一個矩形。

這種方法似乎處於App Store安全編碼領域,特別是如果您退回到僅在操作系統升級破壞您的代碼時使用標籤欄的frame

UIView有一個方便的無證方法,稱爲recursiveDescription,它對調試非常有用。例如:

(gdb) po [[[[[UIApplication sharedApplication] delegate] tabBarController] view] recursiveDescription]