2014-02-13 48 views
0

我有一个应用程序,它具有允许用户登录的初始视图控制器。用户登录后,我试图将视图更改为自定义选项卡栏控制器,是类类型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

回答

1

我不知道这是最好的方式,但它的确切什么我在我的最后一个应用程序,它工作正常。

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

根据苹果的开发者类的引用:

当部署一个标签栏的界面,您必须安装这种观点作为你的窗口的根。与其他视图控制器不同,选项卡栏界面不应该被安装为另一个视图控制器的子视图。

这样做了以后,建立从标签栏视图控制器登录视图控制器故事板模态SEGUE,将其命名为“segueLogin”,并在你的标签栏视图控制器类的viewDidAppear方法手动调用它。

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

[自performSegueWithIdentifier(所述custome类TabViewController的下面):@ “segueLogin” 发件人:自];这就是我需要的。除了我从登录视图这样做,它似乎工作正常。 –

+0

很高兴知道我可以帮忙。但是,如果您通过模态segue显示标签栏视图控制器,我想建议您再次将标签栏视图控制器作为“窗口的根”。我不是这里的专家,但我曾经在导航视图控制器中放置了一个标签栏视图控制器,它让我感到很多奇怪的问题。无论如何,这取决于你。 – AdrianHou

0

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

1

其真的很容易,

我会尽力解决你的问题分两步。

步骤1--在情节串连图板选择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];  
} 
相关问题