2012-01-31 79 views
3

我得到了一個需求,我需要從UITabBarController實現一個UIPopOverController,即在UITabBarController中,當我點擊其中一個被稱爲例如「pop」的選項卡時,彈出窗口應該顯示兩個領域。我的問題是,實現這一目標的最佳方式是什麼?如果有任何視頻或只是一些解釋的材料的例子,那麼你也可以與我分享鏈接。自從我在ios環境中弄溼我的腳之後,就忍耐着我。UITabBarController與UIPopOverController

任何建議,將不勝感激!

由於 瑪克斯

+1

這對系統控制來說是一個相對意想不到的行爲;不要忘了閱讀HIG,並試着問自己在用戶體驗方面是什麼樣的...... – 2012-02-01 03:23:31

回答

0

我放在一起,將顯示所選擇的UITabBarItem上方UIPopoverController的示例項目。

http://mobileoverlord.com/displaying-a-uipopovercontroller-from-a-uitabbaritem/

這包含了一點兩輪牛車,因爲你需要通過的TabBar的子視圖進行迭代。此外,它可能會在iOS 5上不同,因爲TabBar的背景視圖在TabBar的子視圖數組中。它在tabBarController委託方法中實現

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
{ 
    NSInteger index = [[self tabBarController] selectedIndex]; 
    CGRect buttonFrame = [[[[[self tabBarController] tabBar] subviews] objectAtIndex:index+1] frame]; 

    PopOverViewController *popoverView = [PopOverViewController new]; 
    popoverView.contentSizeForViewInPopover = CGSizeMake(250, 300); 
    popover = [[UIPopoverController alloc]initWithContentViewController:popoverView]; 

    NSLog(@"X:%f Y:%f",buttonFrame.origin.x,buttonFrame.origin.y); 

    [popover presentPopoverFromRect:buttonFrame inView:self.tabBarController.tabBar permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES]; 
} 

以下是示例代碼。隨意評論和操縱。

https://github.com/mobileoverlord/UITabBarPopOver-Demo

如果你想將它限制爲僅當某個按鈕被按下,你可以過濾器的類傳入viewController像這樣

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
{ 
    if ([viewController isKindOfClass:[SecondViewController class]]) { 
     NSInteger index = [[self tabBarController] selectedIndex]; 
     CGRect buttonFrame = [[[[[self tabBarController] tabBar] subviews] objectAtIndex:index+1] frame]; 

     PopOverViewController *popoverView = [PopOverViewController new]; 
     popoverView.contentSizeForViewInPopover = CGSizeMake(250, 300); 
     popover = [[UIPopoverController alloc]initWithContentViewController:popoverView]; 

     NSLog(@"X:%f Y:%f",buttonFrame.origin.x,buttonFrame.origin.y); 

     [popover presentPopoverFromRect:buttonFrame inView:self.tabBarController.tabBar permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES]; 
    } 
} 
+0

非常感謝您的源代碼和快速回復MobileOverlord – Maks 2012-01-31 14:53:46

+0

我有一個問題,現在PopOverController顯示兩者TabBarItems,我怎麼能限制只有一個TabBarItems例如說只有SecondViewController,而不是彈出在這兩個視圖控制器 – Maks 2012-01-31 15:47:08

+0

我已經更新了我的答案,說明如何有選擇地根據哪個'viewController'被選中做到這一點。 – MobileOverlord 2012-01-31 18:40:55

相關問題