从普通视图控制器打开 ECSlidingViewController

Posted

技术标签:

【中文标题】从普通视图控制器打开 ECSlidingViewController【英文标题】:Opening a ECSlidingViewController from a Normal View Controller 【发布时间】:2013-05-17 18:20:42 【问题描述】:

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

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

InitViewController (ECSlidingController)

FirstViewController(UIViewController)

SecondViewController(UIViewController)

LeftMenuViewController (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 的东西。

【问题讨论】:

第一、二、三是在顶视图控制器中的导航控制器中?你想从第三个回到第一个还是第二个? @Wain 都是 UIViewController 类,只有 InitViewController 是 ECSliding 类,没有导航控制器 所以你按下各种按钮,每个按钮都会改变视图控制器设置为 ECSliding 视图控制器中的顶部视图控制器?如果问题与该结构的导航有关,您确实需要更好地解释该结构。 @Wain 已编辑!我希望现在更容易理解了。 【参考方案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];

【讨论】:

很抱歉再次打扰您!我有一个FourthViewControllerFifthViewController。两者都使用 ECSliding。我需要将按钮中的FourthViewController 加载到ThirdViewController 中,然后将按钮中的FifthViewController 加载到FourthViewController 中。我需要从我的FifthViewController 回到我的FourthViewController,然后从我的FourthViewController 回到我的FirstViewController。我该怎么做?

以上是关于从普通视图控制器打开 ECSlidingViewController的主要内容,如果未能解决你的问题,请参考以下文章

从导航控制器导航到普通视图控制器

从欢迎屏幕推送视图控制器时遇到问题[关闭]

如何以编程方式将 UITableView 样式从普通转换为组 [重复]

从 Web 视图打开视图控制器

如何从情节提要中的 didSelectRowAtIndexPath 打开视图控制器?

如何从左侧打开视图并且应该适用于所有视图控制器