我使用ECSlidingViewController(参见Documentation)来实现滑动菜单功能。
这是我ViewControllers
Navigation Controller
)导航序列应如下所示:
A----------B1
| |-------C
|
|------B2
同样在SlidingMenu
内,您可以选择直接转到ViewController
B1或ViewController
B2。
我想要实现的效果是:使用SlidingMenu
导航到ViewController B1
或ViewController 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];
}
希望我可以使用这些截图清楚地阐述问题:
滑动菜单:
查看A(左上方的按钮是打开滑动菜单)
查看B1(如果从视图A导航,导航栏和"后退"按钮显示良好)
查看B1(如果从滑动菜单导航,导航栏和"后退"按钮消失)
答案 0 :(得分:0)
此代码是您的问题:
- (IBAction)B1Pressed:(id)sender {
self.slidingViewController.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"B1"];
[self.slidingViewController resetTopViewAnimated:YES];
如果您考虑这是在做什么,它会摧毁中心导航控制器及其包含的A控制器(以及堆栈中的任何其他内容)。
你应该做的不是调用topViewController =
,而是从导航控制器(viewControllers
)获取topViewController
并编辑数组内容(并重置它)进入导航控制器。
通过这种方式,您可以在将新控制器插入堆栈时维护导航和根视图控制器(A)。