通过TabBar向VC争辩

时间:2016-09-01 05:05:12

标签: ios objective-c iphone uiviewcontroller

如下图所示,我有一个TabBar控制器作为我的根视图控制器,并附有一些导航控制器。在我的VC1和VC2中,屏幕上有标签栏和导航栏,这就是我想要的,但对于VC3,我不想要标签栏。当前我只是隐藏并取消隐藏视图中的标签栏。但是,这提出了一些糟糕的用户界面。我认为很棒的是当我呈现VC3时,它只是出现了#34; over"保持导航栏的当前屏幕。有可能吗?我也喜欢演示文稿从右到左就像一个segue(反对从底部显示)

请注意。我使用performSegueWithIdentifier转到VC3

我已经看到了一些解决方案,我必须将rootVC设置为普通的视图控制器(在我的情况下是一个登录VC)。但是,我试图避免这种情况,因为如果用户已经登录,我不需要提供登录。如果我一直将它作为我的rootVC,则用户将被强制加载并且"看到"在看到tabBarVC之前首先登录VC。这将导致。除非有办法逃脱它?

storyboard flow

4 个答案:

答案 0 :(得分:1)

第一种方式:推 您可以通过从故事板启用VC3的标志来隐藏推送时的底栏。

请参考以下图片:

enter image description here

第二种方式:现在

为VC3设置导航控制器,并从VC1或VC2或TabBar显示该导航控制器,如下图所示:

enter image description here

答案 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。