ECSliding ViewController导航层次结构

时间:2014-07-26 20:10:02

标签: ios objective-c uiviewcontroller uinavigationcontroller ecslidingviewcontroller

我使用ECSlidingViewController(参见Documentation)来实现滑动菜单功能。

我打算做什么

这是我ViewControllers

的列表
  • SlidingMenu
  • 查看控制器A(嵌入Navigation Controller
  • 查看控制器B1
  • 查看控制器B2
  • 查看控制器C

导航序列应如下所示:

A----------B1
    |      |-------C 
    |
    |------B2

同样在SlidingMenu内,您可以选择直接转到ViewController B1或ViewController B2。

我想要实现的效果是:使用SlidingMenu导航到ViewController B1ViewController B2时,导航栏上的Back按钮应该会将视图恢复为他们的父母观点。 (即B1 / B2应回到A)。

问题

当应用程序运行时,仅在使用 ECSlidingViewController导航到B1 / B2后,B1 / B2上的导航栏丢失,并且没有&# 34;返回"按钮以进入其父视图(即视图A)。

请注意:如果通过视图A导航B1 / B2,则导航栏很好并且显示良好。

那么,我怎样才能达到预期的效果呢?是否有任何方法可以在其中推送正确的导航堆栈,而不仅仅是替换topViewController

相关代码

在SlidingMenu视图中,有两个用于导航到B1和B2的按钮

- (IBAction)B1Pressed:(id)sender {
    self.slidingViewController.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"B1"];
    [self.slidingViewController resetTopViewAnimated:YES];
}

- (IBAction)B2Pressed:(id)sender {
    self.slidingViewController.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"B2"];
    [self.slidingViewController resetTopViewAnimated:YES];
}

希望我可以使用这些截图清楚地阐述问题:

滑动菜单:

enter image description here

查看A(左上方的按钮是打开滑动菜单)

enter image description here

查看B1(如果从视图A导航,导航栏和"后退"按钮显示良好)

enter image description here

查看B1(如果从滑动菜单导航,导航栏和"后退"按钮消失)

enter image description here

1 个答案:

答案 0 :(得分:0)

此代码是您的问题:

- (IBAction)B1Pressed:(id)sender {
    self.slidingViewController.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"B1"];
    [self.slidingViewController resetTopViewAnimated:YES];

如果您考虑这是在做什么,它会摧毁中心导航控制器及其包含的A控制器(以及堆栈中的任何其他内容)。

你应该做的不是调用topViewController =,而是从导航控制器(viewControllers)获取topViewController并编辑数组内容(并重置它)进入导航控制器。

通过这种方式,您可以在将新控制器插入堆栈时维护导航和根视图控制器(A)。