从普通视图控制器打开ECSlidingViewController

时间:2013-05-17 18:20:42

标签: ios objective-c ecslidingviewcontroller

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

在我的项目中有以下文件:

  

InitViewController(ECSlidingController)

     

FirstViewController(UIViewController)

     

SecondViewController(UIViewController)

     

LeftMenuViewController(UIViewController)

     

ThirdViewController(UIViewController)

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

在我的First和SecondView中有一个相同的按钮,可以将第三视图加载为顶视图控制器,但不是新视图:

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

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

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

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

1 个答案:

答案 0 :(得分: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];