从普通视图控制器打开 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
,您应该将其放入导航控制器并呈现它。然后,当您需要展示fourth
和fifth
时,只需将它们推入导航控制器并再次弹出即可。如果需要,您还可以向他们提供slideController
的参考。
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController :third];
[self presentViewController:nav animated:YES completion:nil];
【讨论】:
很抱歉再次打扰您!我有一个FourthViewController
和FifthViewController
。两者都使用 ECSliding。我需要将按钮中的FourthViewController
加载到ThirdViewController
中,然后将按钮中的FifthViewController
加载到FourthViewController
中。我需要从我的FifthViewController
回到我的FourthViewController
,然后从我的FourthViewController
回到我的FirstViewController
。我该怎么做?以上是关于从普通视图控制器打开 ECSlidingViewController的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式将 UITableView 样式从普通转换为组 [重复]