从视图控制器切换到自定义标签栏控制器

时间:2014-02-13 17:54:03

标签: objective-c xcode uiviewcontroller storyboard uitabview

我有一个应用程序,它有一个允许用户登录的初始视图控制器。用户登录后,我正在尝试将视图更改为类型为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];

我得到了相同的结果。

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

故事板:

enter image description here

选项卡视图控制器在模拟器中的样子:

enter image description here

3 个答案:

答案 0 :(得分:1)

我不确定这是最好的方法,但它与我在上一个应用中所做的完全相同,而且效果很好。

尝试将标签栏视图控制器设置为应用的根/初始视图控制器。

根据Apple的开发人员类参考:

  

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

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

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

答案 1 :(得分:1)

非常简单,

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

步骤1--在故事板中选择你的TabViewController并给它一个标识符(在TabViewController的自定义类下面)

第2步 -

- (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];    
}

答案 2 :(得分:0)

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