我正在尝试以编程方式更改选定的菜单项和显示的 topViewController。换句话说,我正在尝试做同样的事情来更改 UITabBarController 中的选定选项卡:
[self.tabBarController setSelectedIndex:2];
因此,根据另一个 SO 问题(https://stackoverflow.com/a/20309377/1161723),我正在使用它来更改显示的 topViewController:
[self.slidingViewController anchorTopViewToRightAnimated:NO];
self.slidingViewController.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"MESettingsNavigationController"];
[self.slidingViewController resetTopViewAnimated:NO];
但它不起作用。好吧,前两行工作正常,分别显示菜单和更改 topViewController,但最后一行根本不隐藏 sidemenu,所以它一直在那里,直到我通过手势或点击按钮隐藏它。调试显示最后self.slidingViewController
返回nil
而不是 ECSlidingViewController 的实例。如果我跳过第一行和最后一行,只留下:
self.slidingViewController.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"MESettingsNavigationController"];
它使应用程序崩溃。
知道如何通过隐藏侧菜单正确更改视图吗?我正在使用 ECSlidingViewController 2.0.1
编辑:使用竞争块和/或创建对滑动视图控制器的引用没有任何区别:
ECSlidingViewController *slidingViewController = self.slidingViewController;
[slidingViewController anchorTopViewToRightAnimated:NO onComplete:^{
slidingViewController.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"MESettingsNavigationController"];
[slidingViewController resetTopViewAnimated:NO];
}];
2014 年 7 月 14 日更新:
仅当使用自定义视图控制器转换时,侧边菜单才不会隐藏。例如在TransitionFun 示例中。
应用程序在 unwind segue 处理程序中仅保留以下内容时崩溃:
- (IBAction)unwindModalView:(UIStoryboardSegue *)sender
{
ECSlidingViewController *slidingViewController = [self slidingViewController];
slidingViewController.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"METransitionsNavigationController"];
}
注意:如果最后一个视图控制器(调用 unwind segue 的地方)由push segue 而不是modal segue 呈现,则应用程序不会崩溃。
您可以在此处查看图像上视图控制器的层次结构
(它基本上是 TransitionFun 示例,其中还有一个 VC 封装在 NavigationVC 中,并由设置单元格中的 segue 以模态方式呈现)