2012-01-31 60 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