关于ios:Segue to VC over TabBar

Segue to VC over TabBar

如下图所示,我有一个 TabBar 控制器作为我的根视图控制器,并附加了一些导航控制器。在我的 VC1 和 VC2 中,我在屏幕上有标签栏和导航栏,这是我想要的,但是,对于 VC3,我不想要标签栏。目前我只是隐藏和取消隐藏视图中的标签栏会出现。然而,这呈现了一些糟糕的用户界面。我认为很棒的是,当我展示 VC3 时,它只是"在"当前屏幕上展示,同时保留导航栏。有可能这样做吗?我还希望演示文稿从右到左就像一个segue(与从底部显示相反)

注意。我使用 performSegueWithIdentifier 去 VC3

我已经看到了一些解决方案,我必须将 rootVC 设置为普通的视图控制器(在我的例子中是登录 VC)。但是,我试图避免这种情况,因为如果用户已经登录,我不需要提供登录信息。如果我一直将它作为我的 rootVC,则用户将被迫先加载并"查看"登录 VC,然后再查看 tabBarVC。这会导致。除非有办法摆脱它?

storyboard


第一种方式:推
您可以通过从情节提要中启用 VC3 的标志来隐藏推送时的底部栏。

请参考下图:

enter

enter


1>对于标签栏,您可以删除标签栏,也可以从情节提要中隐藏标签栏,但不要为 VC3 使用单独的导航控制器。

您可以在推送或呈现 VC3 时将 VC3 的导航栏项目标题值保留为 VC2 或 VC1 导航栏标题。为此,您必须用户执行 eguewithidentifier 并初始化 VC3 导航栏项目标题值

2> 嘿,用户已经登录,然后在 appdelgate 中,您可以更改根视图控制器。通过查找用户是否从用户默认登录。

您可以使用 window.rootviewcontroller 更改 rootviewcontroller,并且在注销时您可以再次更改 rootviewcontroller。


当你第一次登录时,你必须将根视图控制器设置为登录视图控制器。然后在 viedDidLoad 方法中你必须设置检查是否已经登录。当你第一次运行你的应用程序时它还没有登录所以你可以进入登录页面。登录后,您可以直接进入下一页。您可以使用 LoginViewController viewDidLoad 方法。

1
2
3
4
5
6
7
8
9
- (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

1
2
3
4
5
6
7
- (IBAction)actionLoggin:(id)sender
{
    if ([strUsername isEqualToString:@"xxxxxx"] && [strPassword isEqualToString:@"xxxxxx"]) //If it is correct
    {
       [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"logged_in"];
    }
}

然后当你注销时,将 bool 设置为 NO

1
2
3
4
- (IBAction)actionLoggin:(id)sender
{
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"logged_in"];
}


您可以创建一个新窗口,然后在其上展示您的 VC3,这将确保它位于标签栏之上,以换取制作新的导航控制器和假后退按钮。但我宁愿检查情节提要中的 hide tabbar on push 选项,它使标签栏隐藏了一个不错的动画

对于第二个问题,最好的方法是将storyboard中的rootVC设置为tabbar控制器,并将loginVC分开,在AppDelegate中,检查用户是否登录并将rootVC设置为loginVC或tabbar控制器