我试图以编程方式更改选定的菜单项和显示的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,但是最后一行只是不会隐藏侧面菜单,因此它将一直停留在该位置,直到我通过手势或点击按钮将其隐藏为止。调试显示最后一个
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];
}];
更新14.7.2014:
仅当使用自定义视图控制器转换时,菜单才会隐藏。例如在TransitionFun example中。
在展开的Segue处理程序中仅保留以下内容时,应用程序崩溃:
- (IBAction)unwindModalView:(UIStoryboardSegue *)sender
{
ECSlidingViewController *slidingViewController = [self slidingViewController];
slidingViewController.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"METransitionsNavigationController"];
}
注意:如果显示了最后一个视图控制器(从中调用了取消锁定的控制器)
通过推推搜索而不是模式搜索,应用程序不会崩溃。
您可以在图像here上看到视图控制器的层次结构
(这基本上是TransitionFun示例,其中又有一个VC封装在NavigationVC中,并由Settings的单元格中的segue模态呈现)
最佳答案
self.slidingViewController
是一个计算变量。通过导航视图控制器层次结构来完成计算。因此,如果将视图控制器作为更改的一部分从层次结构中删除,则self.slidingViewController
将停止工作。
继续调用它也是非常低效的。改成:
ECSlidingViewController *slidingController = self.slidingViewController;
[slidingController anchorTopViewToRightAnimated:NO];
slidingController.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"MESettingsNavigationController"];
[slidingController resetTopViewAnimated:NO];
关于ios - 在ECSlidingViewController中以编程方式更改 View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22339114/