通过UITabBarController打开新故事板的正确方法

时间:2014-06-19 21:19:09

标签: ios objective-c

我们正在努力将我们的主要故事板分成更小的故事板,以便使源代码控制更容易合并。关于从UITabBar加载新故事板的正确方法的任何想法?

以下是我们在自定义子类UITabBarController中的内容:

UITabBarItem *cardsTabItem = [self.tabBar.items objectAtIndex:kTabBarIndexCards];

    cardsTabItem.image = [[UIImage imageNamed:@"navCardsOff"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    cardsTabItem.selectedImage = [[UIImage imageNamed:@"navCardsOn"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    cardsTabItem.imageInsets = UIEdgeInsetsMake(-5, 0, 5, 0);
    cardsTabItem.titlePositionAdjustment = UIOffsetMake(0, -5);

1 个答案:

答案 0 :(得分:1)

之前我做过同样的事情,但是使用了UITabBarController。在这种情况下,我们为每个选项卡按钮都有一个故事板,即使其中一个故事板中只有一个视图控制器。我认为你正在使用UITabBarController或响应标签栏委托,答案是相同的。对于单击的每个按钮,确定要加载的视图控制器位于哪个故事板中:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"leftButtonStoryboard" bundle:[NSBundle mainBundle]];
UIViewController *vc = [storyboard instantiateInitialViewController];

//or

UIStoryboard *otherVC = [storyboard instantiateViewControllerWithIdentifier:@"CameraViewController"];

然后你可以呈现它,推它或其他什么。

在我的情况下,因为我使用的是UITabBarController,所有这些都是在控制器初始化期间为所有不同的按钮完成的。

默认情况下,你在故事板中使用的所有不同的视图控制器(故事板id)很可能派上用场,我通常在viewController类之后命名它们所以我不必记住我所谓的它

我还建议您在尝试实例化另一个视图控制器时避免使用self.storyboard属性,因为最终可能会出现在选项卡之间共享控制器的情况。明确你从哪个故事板加载控制器可以帮助提高可读性和避免错误。

编辑 - 一个更具体的例子:

您需要做的是设置UITabViewController的viewControllers属性,我在其init方法中执行此操作。例如

- (id)initWithCoder:(NSCoder *)aDecoder {
if (self = [super initWithCoder:aDecoder]) {
    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
    UIViewController *one = [mainStoryboard instantiateViewControllerWithIdentifier:@"VC1"];
    UIViewController *two = [mainStoryboard instantiateViewControllerWithIdentifier:@"VC2"];

    self.viewControllers = @[one,two];
    }
return self;
}

如果您在代码中编写代码或者使用故事板,则可以使用此技术。请注意,如果您已经通过故事板连接了其他视图控制器,那么除非您在那里实例化它们,否则您将松开。您也可以使用setViewControllers:animated:方法。

创建自定义标签栏项目(底部的按钮)的代码应该位于各个视图控制器中,并分配给其tabBarItem属性。 UITabBarController将使用该属性来创建正确样式的按钮。如果您不提供该属性,则会获得从1开始的默认按钮。