【发布时间】:2015-05-21 18:45:08
【问题描述】:
我正在尝试以编程方式更改选定的菜单项和显示的 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 example。
在 unwind segue 处理程序中仅保留以下内容时应用程序崩溃:
- (IBAction)unwindModalView:(UIStoryboardSegue *)sender
{
ECSlidingViewController *slidingViewController = [self slidingViewController];
slidingViewController.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"METransitionsNavigationController"];
}
注意:如果显示最后一个视图控制器(从其中调用 unwind segue) 通过 push segue 而不是 modal segue,应用不会崩溃。
你可以在图片here上看到视图控制器的层次结构
(基本上是 TransitionFun 示例,在 NavigationVC 中封装了另外一个 VC,并由设置单元格中的 segue 模态呈现)
【问题讨论】:
标签: ios ecslidingviewcontroller ecslidingviewcontroller-2