UISplitView在详细信息视图底部有工具栏/ tabbar

时间:2011-03-16 18:56:45

标签: tabs tabbar ipad

所以这里。我开始使用标准的开箱即用的用于iPad的splitview应用程序。根视图左侧和详细视图右侧。细节视图顶部有工具栏。

我想要添加的是详细信息视图底部的标签栏,并在工具栏标签栏之间的详细信息视图中加载标签。

问题是,我是否在它们之间添加另一个视图以加载标签,如果是这样,我如何调整大小并尊重工具栏和标签栏高度。

清除?

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

1 个答案:

答案 0 :(得分:2)

是的,答案非常简单。像SplitViewControllers这样的UITabBarControllers仅供Apple使用,因此您无法在另一个视图中嵌套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!

希望这有助于其他人。