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

时间:2016-07-26 13:44:17

标签: ios objective-c uiviewcontroller

我使用以下代码来呈现视图控制器

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

                     }];

我想在其他一些类中获取这个预先设定的“viewController”的当前实例。我怎么能得到它。在此先感谢!

2 个答案:

答案 0 :(得分:0)

您需要先显示导航控制器。

  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];

答案 1 :(得分:0)

如果您需要两个视图控制器来了解彼此,那么您就会遇到架构问题。

通常,您的VC只处理视觉/ UI交互,如动画或按钮触摸。这些事情显然不需要超越VC(VC2并不关心VC1有淡入淡出动画或3个按钮)。

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

但好消息是,如果那"服务"在你的控制器之外,你可以在任何地方使用它。

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

请记住,一般情况下,您的VC不应该做与视觉无关的任何事情。如果你正在进行webservice调用,业务逻辑或类似的东西,它属于另一个类。这样,它组织起来(这本身就足够了),但是,如果您的视觉效果发生变化,或者您需要在其他地方使用相同的逻辑,那么您已经准备好了这个课程。

这不是一个完整的例子,但是如果你在编程方面足够舒服,你应该很好地实现它。

小心点:

  • 不要过度使用单身人士,或者更糟糕的是,静态。
  • 不要忘记单一责任(不要把所有内容都推到一个班级)。
  • 不要进行不必要的网络服务电话。如果您使用了大量数据,请将其保存在内存中。

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