2016-09-01 50 views
0

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

注意。我使用performSegueWithIdentifier去VC3

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

storyboard flow

+0

爱德华挂兄弟检查我的回答关于已经在或不在 – user3182143

回答

1

第一种方式:PUSH 您可以通过从故事板使VC3的标志隐藏推动下吧。

请参考下面的图片:

enter image description here

方式二:PRESENT

设置VC3导航控制器和呈现来自VC1或VC2或的TabBar该导航控制器如以下的图像:

enter image description here

+0

我试过第一种方式,并没有像VC3显示的那样,标签栏仍然存在一小段时间然后它隐藏。对于第二种方法,当我将VC1和VC2中的两个箭头连接到右侧的NavVC时,该navVC自动带有tabBar(带推塞格)。所以我的VC 3仍然有一个标签栏底部 – user172902

+0

第二种方式,你应该使用礼物....没有推...我已经在答案中提到.... –

+0

这是否是工作? –

0

您可以创建一个新的窗口,th在它上面展示你的VC3,这将确保它在tabbar上,作为交换制造新的导航控制器和假按钮。但我宁愿您在故事板hide tabbar on push选项,它给的TabBar隐藏着一个漂亮的动画

关于第二个问题,最好的办法是让rootVC在故事板的TabBar控制器,并分开loginVC,在AppDelegate中,检查用户是否登录,并将rootVC设置为loginVC或tabbar控制器

+0

你介意提供一些示例代码:“你可以创建一个新窗口,然后展示你的VC3,这将确保它在tabbar上,作为交换制作新的导航控制器和假背按钮”我试过类似的东西,但VC是从屏幕底部呈现的。我不确定如何以编程方式为该VC添加导航栏。谢谢 – user172902

+0

我想你已经试过了,那么你就知道该怎么做了,只需稍微调整一下,而不是展示VC远近,你首先展示一个不可见的VC(没有动画),然后推到VC3,我只有这样做之前,但没有导航栏,仍然是我反对这样做,而只是找到一种方法来隐藏你的tabbar,而不是这个过于复杂的方式 – Tj3n

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"); 
    } 
} 

当你登录成功设置布尔为YES

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

然后,当你退出时,布尔设置为NO

- (IBAction)actionLoggin:(id)sender 
{ 
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"logged_in"]; 
} 
+0

我试图设置我的loginVC作为我的rootVC和viewDidLoad的第一行,我检查如果NSuserdefault中有任何用户数据。如果存在,执行SegueBabVCv。但是,这是行不通的,因为我无法在viewDidLoad中执行segue。除非他已注销,否则我不希望用户必须查看loginVC。 – user172902

0

1>标签栏,你可以删除的TabBar或者可以从故事板中隐藏Tabbar,但不要为VC3采用单独的导航控制器。

你可以保持VC3的导航栏项目标题值VC2或VC1导航栏标题,同时推动或呈现VC3.For,你必须用户performseguewithidentifier并初始化VC3 nabber项标题值

2>嘿用户已经登录然后在appdelgate你可以改变根视图controller.By发现用户登录或不从用户默认。

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