我有一个应用程序,它有一个允许用户登录的初始视图控制器。用户登录后,我正在尝试将视图更改为类型为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];
我得到了相同的结果。
如何使我的标签视图控制器在初始化时的故事板中看起来像它?
故事板:
选项卡视图控制器在模拟器中的样子:
答案 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]
创建的情况下,您不会以编程方式创建所有选项卡。