如果“setNavigationBarHidden:YES”,那么如何回到以前的控制器?

时间:2014-01-19 18:35:08

标签: iphone objective-c model-view-controller ios7 uinavigationcontroller

我不想让导航控制器在整个项目中显示其导航栏。


现在有三个视图控制器

  • (1)登录视图控制器
  • (2)注册视图控制器
  • (3)家庭视图控制器。

<小时/> 我只希望使用动作(可以通过任何类型的事件触发,即拖动手势,不需要按下按钮)来在这些视图控制器之间切换。但是我发现一旦进入“注册视图控制器”,我就无法返回登录视图控制器,因为没有“BACK”导航栏。
问题:

  • 如何在一个视图控制器中“PUSH”,然后在另一个视图控制器中“POP”?
  • 或者有一些不同的方法来解决这个问题?

<小时/> 非常感谢,任何建议都很棒。

2 个答案:

答案 0 :(得分:1)

要在编程方面向后导航控制器的导航堆栈,请调用此方法:

[self popViewControllerAnimated:YES];

您拨打电话的时间和地点取决于您希望应用的流动方式。实际上,当按下导航栏的后退按钮时,默认导航控制器会自动调用它。但是如果您隐藏导航栏并仍然需要弹回,则可以调用此方法弹出。

至于推进,只需在故事板上创建Push segue,为其命名,然后在代码中调用此方法:

[self performSegueWithIdentifier:@"segue_YOUR_SEGUE_ID" sender:self];

关于你的应用程序的问题,最有意义的是登录视图本身就是一个视图。它应包含新用户的注册视图的模态segue以及主视图控制器的模态segue(可能需要或可能不需要嵌入到导航控制器中)。

执行模态segue与push segue完全相同(如果你正在使用故事板。连接segue,选择模态segue,然后在需要segue时调用代码中的performSegueWithIdentifier:方法发生。

解除模态视图略有不同,但仍然非常简单。它是这样的:

[self dismissViewControllerAnimated:YES completion:nil];

答案 1 :(得分:0)

对'if'语句进行相当检查......

if (self.navigationController.navigationBarHidden == NO) {
//YOUR ACTION
}

希望有所帮助!