【问题标题】:Talking to A UITabBarController In Story boards与故事板中的 UITabBarController 交谈
【发布时间】:2012-06-18 16:54:01
【问题描述】:

所以在我的应用程序中,我使用了故事板,初始的 viewControllerUITabBarController。我想要做的是当应用程序启动时,我希望能够设置 tabBarController 有 3 个或 4 个项目。所以在 appDel 中,我计划检查用户应该看到 3 或 4 个选项卡的天气,然后tabBarController 应该反映这一点。

我尝试将tabBarController 子类化,但它不起作用:

@implementation TabBarController

-(id) init{
    if ((self = [super init])) {
        [[[[self tabBar] items] objectAtIndex:2] setEnabled:YES];
        [[[[self tabBar] items] objectAtIndex:3] setEnabled:NO];
        [[[[self tabBar] items] objectAtIndex:3] setHidden:YES];  
    }
    return self;
}
@end

我们将不胜感激。 提前致谢。

【问题讨论】:

    标签: iphone ios uitabbarcontroller storyboard uistoryboard


    【解决方案1】:

    我认为更简单(可能不是最好)的方法是让 TabBar 控制器不是初始视图控制器并创建两个标签栏控制器。从您的初始视图中,您可以决定使用您将显示的标签栏控制器。您还可以将两个标签栏控制器链接到相同的标签/视图控制器(在它们之间重复的那些)。

    在初始视图控制器中,您添加一些代码来了解您将执行哪个 segue,瞧。

    类似这样的:

    不过,我正在研究一个代码解决方案(看起来很有趣!)。如果我发现任何东西会更新。

    编辑: 这是编码的解决方案。 (我正在使用故事板,但我相信您可以翻译代码以使用 nib 文件)。

    首先要做的是创建故事板的一个实例:

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:[NSBundle mainBundle]];
    

    然后实例化tabbarcontroller:

    UITabBarController *myTab = [storyboard instantiateViewControllerWithIdentifier:@"tabBar"];
    

    然后实例化你想要添加到标签栏的新视图控制器:

    UIViewController *newVC = [storyboard instantiateViewControllerWithIdentifier:@"newView"];
    

    这是有趣的部分,您将所有视图控制器/选项卡放入一个数组中,然后从该数组中添加或删除视图。然后将 tabbarcontroller 的视图控制器设置为修改后的数组(我添加一个 viewController 并删除另一个)。

    NSMutableArray* controllers = [myTab.viewControllers mutableCopy];
    [controllers insertObject:newVC atIndex:0];
    [controllers removeObjectAtIndex:2];
    [myTab setViewControllers:controllers];
    

    然后你可以像这样推动你的标签栏控制器:

    [self.navigationController pushViewController:myTab animated:YES];
    

    这里我使用的是故事板和 ARC,如果你不使用 ARC,你可以为 nib 修改它并释放数组。这写起来很有趣!希望能帮助到你!干杯!

    【讨论】:

    • 谢谢。我很欣赏这个答案以及你对它的调查。我相信这会奏效,但我不想那样做。但是,如果事态严重,那可能就是我最终的结果。谢谢,如果您想出更有效的解决方案,请告诉我
    • 更新答案,看看吧。
    • 我假设这在 App 委托中。但是,由于我使用的是故事板,因此我在应用程序 Delegate 中没有对 self.navigationController 的引用
    • 否则,这看起来是一个很有前途的解决方案
    • 我将代码放在应用程序的初始视图控制器中,只是带有指向 tabbarController 的导航控制器的视图控制器,然后我将代码放在该初始视图的 viewDidload 委托中。初始视图控制器在应用程序启动时永远不会看到,因为它会在显示之前推送 tabbarController(当然,您需要删除标签栏控制器上的后退按钮)。
    猜你喜欢
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 2016-01-15
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多