如下图所示,我有一个TabBar控制器作为我的根视图控制器,并附有一些导航控制器。在我的VC1和VC2中,屏幕上有标签栏和导航栏,这就是我想要的,但对于VC3,我不想要标签栏。当前我只是隐藏并取消隐藏视图中的标签栏。但是,这提出了一些糟糕的用户界面。我认为很棒的是当我呈现VC3时,它只是出现了#34; over"保持导航栏的当前屏幕。有可能吗?我也喜欢演示文稿从右到左就像一个segue(反对从底部显示)
请注意。我使用performSegueWithIdentifier转到VC3
我已经看到了一些解决方案,我必须将rootVC设置为普通的视图控制器(在我的情况下是一个登录VC)。但是,我试图避免这种情况,因为如果用户已经登录,我不需要提供登录。如果我一直将它作为我的rootVC,则用户将被强制加载并且"看到"在看到tabBarVC之前首先登录VC。这将导致。除非有办法逃脱它?
答案 0 :(得分:1)
答案 1 :(得分:0)
您可以创建一个新窗口,然后在其上显示您的VC3,这将确保它超过tabbar,以换取新的导航控制器和假后退按钮。但我宁愿检查一下故事板中的hide tabbar on push
选项,它会让tabbar隐藏一个漂亮的动画
对于第二个问题,最好的方法是将故事板中的rootVC设置为tabbar控制器,并在AppDelegate中分离loginVC,检查用户是否登录,并将rootVC设置为loginVC或tabbar controller
答案 2 :(得分:0)
首次登录时,必须将根视图控制器设置为登录视图控制器。然后在viedDidLoad方法中,您必须设置已登录或未登录的检查。首次运行应用程序时,它尚未登录,因此您可以登录页面。一旦登录,你就可以直接进入下一页。你可以使用LoginViewController viewDidLoad方法。
- (void)viewDidLoad
{
[super viewDidLoad];
BOOL loggedIn = [[NSUserDefaults standardUserDefaults] boolForKey:@"logged_in"];
if(loggedIn)
{
NSLog(@"It has already logged in so go to next view");
}
}
登录成功后,将bool设置为YES
- (IBAction)actionLoggin:(id)sender
{
if ([strUsername isEqualToString:@"xxxxxx"] && [strPassword isEqualToString:@"xxxxxx"]) //If it is correct
{
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"logged_in"];
}
}
然后当您注销时,将bool设置为NO
- (IBAction)actionLoggin:(id)sender
{
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"logged_in"];
}
答案 3 :(得分:0)
1>对于标签栏,您可以删除标签栏,也可以从故事板中隐藏标签栏,但不要为VC3使用单独的导航控制器。
您可以在推送或呈现VC3时将VC3的导航栏项目标题值保持为VC2或VC1导航栏标题。为此您必须使用标识符来识别并初始化VC3 nabber项目标题值
2 - ;嘿,对于用户已经登录然后在appdelgate你可以更改根视图控制器。通过用户默认登录或不登录用户。
您可以使用window.rootviewcontroller更改rootviewcontroller,并在注销时再次更改rootviewcontroller。