【问题标题】:UISplitView with toolbar/tabbar at bottom of detail viewUISplitView 在详细视图底部带有工具栏/标签栏
【发布时间】:2011-07-16 20:44:05
【问题描述】:

就这样吧。我从适用于 iPad 的标准开箱即用 splitview 应用程序开始。左侧的根视图和右侧的详细视图。详细视图的顶部有它的工具栏。

我想在详细视图底部添加一个选项卡栏,并在工具栏选项卡之间的详细信息视图中加载选项卡。

这就是问题所在,我是否在它们之间添加另一个视图以将选项卡加载到其中,如果是这样,我如何调整它的大小并尊重工具栏和选项卡栏的高度。

清除?

希望有人能指出我正确的方向。示例会很棒,网络上的每个示例似乎都是开箱即用的 hello world 风格。

【问题讨论】:

    标签: tabs tabbar ipad


    【解决方案1】:

    是的,答案真的很简单。 Apple 打算将诸如 SplitViewControllers 之类的 UITabBarController 仅用作根视图控制器,因此您不能将 TabBarController 嵌套在另一个视图中,但是您可以将 UITabBar 嵌套在视图中。

    我在底部的详细信息视图中添加了 Tabbar,在顶部添加了导航栏,然后在它们之间添加了占位符视图。全部在 Interface Builder 中!,您将希望使用占位符视图上的自动调整大小来打开所有内容。

    接下来,实现 UITabBarDelegate。为此,您需要:

    - (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {
    

    从中您可以使用 item.tag ,如果您在 Interface Builder 中为每个项目提供一个唯一的标签,它将让您知道用户单击了哪个选项卡。我为我设置了定义的值:

    #define VIEW_TAB_A 0
    #define VIEW_TAB_B 1
    #define VIEW_TAB_C 2
    

    然后你会想要......好吧,我只是让你看到

        - (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {
        [self switchToView:item];
    }
    
    - (void) switchToView : (UITabBarItem*) item {
    
        if( currentViewController != nil ) {
            [currentViewController viewWillDisappear:NO];
            [currentViewController.view removeFromSuperview];               
        }
    
        switch(item.tag) {
            case VIEW_TAB_A:
                currentViewController = self.viewA;
                break;
            case SCAN_VIEW_TAB_B:
                currentViewController = self.viewB;
                break;
            case PROMOTIONS_VIEW_TAB_C:
                currentViewController = self.viewC;
                break;
        }
    
        UIView *aView = currentViewController.view; 
    
        aView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
        aView.frame = placeholderView.frame;
    
        [currentViewController viewWillAppear:NO];
    
        [self.view insertSubview:aView aboveSubview:placeholderView];
        if( currentViewController != nil ) {
            [currentViewController viewDidDisappear:NO];
        }
        [currentViewController viewDidAppear:NO];
    }
    

    记住首先在 viewDidLoad 中分配视图(viewA、viewB、viewC),然后在 dealloc 中释放。还要注意 autoresizingMask!

    希望这对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-25
      • 2021-10-21
      • 2015-11-23
      • 1970-01-01
      相关资源
      最近更新 更多