我试图以编程方式更改选定的菜单项和显示的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/

10-14 20:26
查看更多