【问题标题】:Switch from view controller to custom tab bar controller从视图控制器切换到自定义标签栏控制器
【发布时间】:2014-02-13 17:54:02
【问题描述】:

我有一个应用程序,它有一个允许用户登录的初始视图控制器。用户登录后,我试图将视图更改为类类型 TabViewController 的自定义选项卡栏控制器。问题是当我切换到标签栏控制器时,屏幕是黑色的,底部标签栏是灰色和空的。

以下是一些相关代码:

在 ViewController.m 中(初始登录视图)

- (IBAction)logInButtonClicked:(UIButton *)sender
{
    TabViewController *tabView = [[TabViewController alloc] initWithSession:session];
    [self presentViewController:tabView animated:YES completion:nil];
}

在 TabViewController.m(分配给标签栏控制器的类)中

-(id) initWithSession: (Session*) s
{
    self = [super init];

    if (self)
    {
        session = s;
    }

    return self;
}

请注意,当我像这样进行默认初始化时:

TabViewController *tabView = [[TabViewController alloc] init];

我得到了同样的结果。

如何使我的标签视图控制器在初始化时看起来像我的故事板中的样子?

故事板:

标签视图控制器在模拟器中的样子:

【问题讨论】:

    标签: objective-c xcode uiviewcontroller storyboard uitabview


    【解决方案1】:

    我不确定这是不是最好的方法,但这正是我在上一个应用程序中所做的,而且效果很好。

    尝试使标签栏视图控制器成为您应用的根/初始视图控制器。

    根据苹果的开发者类参考:

    部署标签栏界面时,您必须将此视图安装为窗口的根目录。与其他视图控制器不同,标签栏界面永远不应安装为另一个视图控制器的子级。

    完成此操作后,在情节提要中设置从标签栏视图控制器到登录视图控制器的模态 segue,将其命名为“segueLogin”并在标签栏视图控制器类的 viewDidAppear 方法中手动调用它。

    if(!userHasLogin){
        [self performSegueWithIdentifier:@"segueLogin" sender:self];
    }
    

    【讨论】:

    • [self performSegueWithIdentifier:@"segueLogin" sender:self];这就是我需要的。除了我是从登录视图中执行此操作外,它似乎工作正常。
    • 很高兴知道我能帮上忙。但是如果您通过模态 segue 显示标签栏视图控制器,我建议您将标签栏视图控制器设置为“窗口的根” “ 再次。我不是这里的专家,但我曾经将标签栏视图控制器放在导航视图控制器中,这给我带来了很多奇怪的问题。无论如何,这取决于你。
    【解决方案2】:

    真的很简单,

    我将尝试分两步解决您的问题。

    第一步——在storyboard中选择你的TabViewController并给它一个标识符(在TabViewController的custome类下面)

    第二步--

    - (IBAction)logInButtonClicked:(UIButton *)sender
    {
     UIStoryboard *storyBoard=[UIStoryboard storyboardWithName:@"Your_Story_Board_Name" bundle:nil];
    TabViewController *tabView = [storyBoard instantiateViewControllerWithIdentifier:@"TabViewController_Identifier_From_Storyboard"];
    [self presentViewController:tabView animated:YES completion:nil];    
    }
    

    【讨论】:

      【解决方案3】:

      您应该使用UIStoryboard- (id)instantiateViewControllerWithIdentifier:(NSString *)identifier 创建您的TabViewController 在您的情况下,使用 [[TabViewController alloc] init] 创建是错误的,您不会以编程方式创建所有选项卡。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-15
        • 1970-01-01
        • 1970-01-01
        • 2012-07-26
        • 2011-06-05
        • 1970-01-01
        • 2012-03-30
        相关资源
        最近更新 更多