如何当前呈现视图控制器的实例?

Posted

技术标签:

【中文标题】如何当前呈现视图控制器的实例?【英文标题】:How to current instance of presented view Controller? 【发布时间】:2016-07-26 13:44:17 【问题描述】:

我正在使用下面的代码来展示视图控制器,

      ViewController *ViewController = [[ViewController alloc] init];
      ViewController.modalPresentationStyle = UIModalPresentationFormSheet;            
      UINavigationController *navLayersViewController = [UINavigationController alloc] initWithRootViewController:ViewController];
[self presentViewController:navLayersViewController
                       animated:YES
                     completion:^

                     ];

我想在其他类中获取这个预先设置的“viewController”的当前实例。我怎样才能得到它。提前致谢!

【问题讨论】:

【参考方案1】:

你需要先展示导航控制器。

  ViewController *myViewController = [[ViewController alloc] init];
  myViewController.modalPresentationStyle = UIModalPresentationFormSheet;            
  UINavigationController *navLayersViewController = [UINavigationController alloc] initWithRootViewController:myViewController];

如果你在视图控制器类中展示它,那么做

 [self presentViewController: navLayersViewController animated:YES completion:nil];

否则获取根控制器的引用,然后做

[rootController presentViewController: navLayersViewController animated:YES completion:nil];

【讨论】:

【参考方案2】:

如果您需要两个视图控制器相互了解,那么您就有了架构问题。

通常,您的 VC 只处理视觉效果/UI 交互,例如动画或按钮触摸。这些东西显然不需要超出 VC(VC2 不在乎 VC1 有淡入淡出动画,或者 3 个按钮)。

在显示数据时,数据来自外部类/服务/管理器;人们称之为许多不同的东西。

但好消息是,如果该“服务”在您的控制器之外,您可以在任何地方使用它。

在 VC1 中,您可以执行 myService.GetListOfMessages();(例如),没有什么能阻止您从另一个班级使用相同的服务执行此操作。您现在可以从 VC1、VC2 或任何必要的地方访问您的消息列表。

请记住,通常情况下,您的 VC 不应该做任何与视觉效果无关的事情。如果你在做 web 服务调用、业务逻辑或类似的事情,它属于另一个类。这样,它是有组织的(这本身就足够了),而且,如果你的视觉效果发生变化,或者你在其他地方需要相同的逻辑,你就已经准备好了课程。

这不是一个完整的例子,但如果你对编程足够熟悉,你应该可以很好地实现它。

小心点:

不要过度使用单例,或者更糟糕的是静态。 不要忘记单一职责(不要把所有东西都放在一个类中)。 不要进行不必要的 Web 服务调用。如果是您经常使用的数据,请将其保存在内存中。

考虑到所有这些,您应该没问题,您的控制器实际上会处理更少的工作,同时仍然可以访问他们需要的数据。

【讨论】:

以上是关于如何当前呈现视图控制器的实例?的主要内容,如果未能解决你的问题,请参考以下文章

如果当前视图控制器被呈现并推送,如何展开到正确的视图控制器?

如何以编程方式快速使用情节提要 ID 获取当前视图控制器(当前正在呈现)?

呈现的视图控制器如何从当前方向(尤其是横向)初始化?

当视图控制器呈现在另一个视图控制器上时如何获取屏幕截图?

关闭当前的模态视图控制器,然后呈现新的模态视图控制器

iPhone:如何从左到右制作当前的模态视图控制器动画