0

我正在使用ECSliding,但我遇到了这个问题!

在我的项目中有这些文件:

初始化视图控制器(ECSlidingController)

第一视图控制器(UIViewController)

第二视图控制器(UIViewController)

左菜单视图控制器(UIViewController)

第三视图控制器(UIViewController)

我使用 InitView 将我的 FirstView 设置为顶视图,向右滑动打开 LeftMenu。在 LeftMenu 中有 2 个按钮,一个按钮作为顶视图加载 FirstView,第二个按钮加载 SecondView。

在我的 FirstView 和 SecondView 中有一个相同的按钮,它不是将 ThirdView 作为顶视图控制器而是作为新视图加载:

ThirdViewController *third = [self.storyboard
instantiateViewControllerWithIdentifier:@"Third"];
[self presentViewController:third animated:YES completion:nil];

在我的 ThirdView 中有 2 个按钮,一个按钮加载 FirstView,第二个加载 SecondView。由于 ThirdView 不是顶视图而是另一个视图,我必须调用 ECSliding 才能打开我的 FirstView 或 SecondView。我使用我的 InitView 成功地从我的 ThirdView 加载了 FirstView

InitialSlidingViewController *home = [self.storyboard
instantiateViewControllerWithIdentifier:@"Init"];
[self presentViewController:home animated:YES completion:nil];

但是如何从我的 ThirdView 加载 SecondView?我的问题基本上是如何在普通视图之后加载使用 ECSliding 的东西。

4

1 回答 1

1

Third我们想回到滑动视图控制器并更改顶视图控制器。您目前正在使用此代码做什么:

InitialSlidingViewController *home = [self.storyboard instantiateViewControllerWithIdentifier:@"Init"];
[self presentViewController:home animated:YES completion:nil];

正在创建一个全新的滑动视图控制器来显示。最终,通过这样做,您将耗尽内存,因为您将分配数百个呈现的视图并且永远不可见。

所以,我们要做的是给Third一个属性:

@property (weak, nonatomic) ECSlidingViewController *slideController;

我们想在呈现之前设置该属性Third

ThirdViewController *third = [self.storyboard instantiateViewControllerWithIdentifier:@"Third"];
third.slideController = self.slidingViewController;
[self presentViewController:third animated:YES completion:nil];

现在,当按下第三个按钮之一时,我们可以说:“显示的是什么?我们可以直接关闭还是需要更改并关闭?”:

- (void)oneButtonPressed {
    if ([self.slideController.topViewController isKindOfClass:[SecondViewController class]]) {
        FirstViewController *first = [self.storyboard instantiateViewControllerWithIdentifier:@"First"];
        self.slideController.topViewController = first;
    }

    [self dismissViewControllerAnimated:YES];
}

你需要编写相应的方法twoButtonPressed,你就完成了。

对于您的新评论,而不是呈现third,您应该将其放入导航控制器并呈现。然后,当您需要演示时fourthfifth您只需将它们推入导航控制器并再次弹出它们。如果需要,您还可以给他们一个参考slideController

UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController :third];
[self presentViewController:nav animated:YES completion:nil];
于 2013-05-18T06:47:31.233 回答