【问题标题】:Navigation Controller. Navigation between multiple view controllers导航控制器。多个视图控制器之间的导航
【发布时间】:2014-10-10 04:16:35
【问题描述】:

![这是我的视图控制器连接外观][1]

http://i58.tinypic.com/2mepfv4.png

![我必须通过编程从视图控制器A到VC-B,因为它应该满足基于设备ID的登录认证。让我解释清楚。当用户安装我的应用程序时,他应该设置他的电子邮件并验证。验证后他应该移动到 VC-B。移动 VC-B 后,当他再次打开应用程序时,Viewcontroller-A 不应再次打开。类似于杀死视图控制器-A,并在他打开应用程序时加载 VC-B。

问题1-如何彻底杀死视图控制器-A。

第二件事我不想在 View controller-A 上显示导航栏,但在 View VC-B、VC-C 和 VC-D 上显示。我想显示导航栏,因为用户应该能够来回移动。这就是我再次在 VC-B 之前添加导航控制器的原因。

如果我无法在 VC-B 上显示导航栏,直到我在视图控制器 A 之前启用导航控制器上的显示导航栏。

问题 2-如何在 VC-B 上启用导航栏,但在 Viewcontroller-A 上不启用。

][1] 这是我如何从视图控制器 A 移动到 VC-B 的代码。

    if (alertView.tag == 99) {
    if(buttonIndex == 0){
    VC-B *vcb =
    [self.storyboard instantiateViewControllerWithIdentifier:@"VC-B"];
      [self.navigationController pushViewController:vcb animated:YES];

} } 帮我指出正确的方向。

【问题讨论】:

    标签: objective-c ios7 model-view-controller uiviewcontroller storyboard


    【解决方案1】:

    您不一定需要杀死 A 视图控制器,我认为这不是一个好主意。

    当用户成功验证后,您可以通过在 NSUserDefaults 中设置信息来解决此问题。然后导航到 B 视图控制器。

    在方法中:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    

    始终检查是否在 NSUserDefaults 中设置了经过验证的标志,如果是 - 将导航控制器的 rootViewController 设置为 B 视图控制器,否则设置为 A 视图控制器。

    要隐藏/取消隐藏导航栏,您可以使用以下代码从任何视图控制器(假设它们属于导航控制器)执行此操作:

    self.navigationController.navigationBar.hidden = YES; // or NO
    

    此代码可以编写在视图控制器类中,在 viewDidLoad、viewWillAppear:、viewDidAppear: 内或任何您需要的地方。

    如果你想要一个漂亮的隐藏/取消隐藏动画,还有一些方法。

    【讨论】:

    • 感谢您的快速回复。,您能详细解释一下那个方法吗?,
    • 该方法可以在 AppDelegate.h 文件中被覆盖,并且在应用启动时调用。您还可以使用“- (void)applicationWillEnterForeground:(UIApplication *)application”方法,每当应用程序从后台转到前台时都会调用该方法。查看 Apple 文档了解更多详情。