【问题标题】:Invoking a UIView Controller from a UIView从 UIView 调用 UIView 控制器
【发布时间】:2014-11-17 07:02:44
【问题描述】:

我有一个初始视图控制器,比如 vc1。它有模态按钮,当被选中时,它会将我带到第二个视图控制器 vc2。在这个视图控制器 (vc2) 中,我定义了一个视图,比如“视图”。现在,在执行了一些动画之后,我想回到 vc1。这可能吗?

我已经能够使用以下方法关闭当前视图:

    [view removeFromSuperview];

但我想回到之前的视图控制器 vc1。根据这个帖子:Get to UIViewController from UIView?,了解到可以获取当前的UIViewController。但是如何回到之前的视图控制器呢?

【问题讨论】:

  • 你在做 PUSH ViewController 还是 PresentViewController ?还是 POPOverController ?

标签: ios view uiview uiviewcontroller


【解决方案1】:

首先,正如您引用的帖子中所讨论的,我们“不应该直接访问视图控制器”,我认为这将与 MVC 的方向相反。

我不确定你想如何回到 vc1,这是通过按下某个按钮触发的吗?如果您想返回,您可以在 vc2 中执行此操作,而不是在视图中执行此操作。你看,在 MVC 中,视图只是显示 UI 哪个视图控制器告诉它执行并响应用户的操作,然后视图控制器处理所有逻辑,所以当你想回到 vc1 时,我认为放置vc2中的控制代码,只要给view绑定一些action,比如@selector或者block,然后v​​c2中的view就可以触发这个,就可以了。

【讨论】:

  • 好的,我可以从 uiviewcontroller 子类调用 uiview 子类吗?
  • 回复 vasupradha (对不起,我不知道如何在此评论中提及您):在 VC 中访问子视图的视图要容易得多。如果视图(或子视图)是 VC 或 VC 视图的 @property 或使用 [UIView viewWithTag:] 则直接访问视图(或子视图),官方文档说“此方法搜索当前视图及其所有子视图以查找指定视图”。
【解决方案2】:

我认为您将 Views 与 ViewControllers 混淆了。我认为您根本不需要vc2。

在 vc1 中试试这个:

  • 按下按钮时,创建一个新视图(不是视图控制器)
  • 将视图作为子视图添加到 self.view
  • 做动画
  • 从附加到动画的完成块中删除新视图

【讨论】:

  • 嘿安娜,我按照你说的做了,它工作得很好......现在我的观点是 vc1。单击 vc1 中的按钮时,我的视图现在加载。我已经给出 [view removeFromSuperview]; 来删除视图。现在,出现一个空白屏幕,但不是我的 vc1。如何让 vc1 出现?
  • 您是要删除您的子视图,还是 vc1 的视图 (self.view)?您只想删除子视图。如果不是这样,您需要在删除子视图后刷新 self.view。尝试以下一项(或多项):[self.view setNeedsDisplay] 和/或 [self.view layoutIfNeeded]
  • 我有点想从视图控制器中删除 rrot 视图。我删除了子视图,现在一切正常...非常感谢您...
【解决方案3】:
[self dismissViewControllerAnimated:YES completion:nil];

将其写入动画完成处理程序中,或者在您按照您的说明通过此代码删除视图之后,

[view removeFromSuperview];

【讨论】:

  • 我已经尝试过了,它说声明的 没有可见界面。虽然我有一个视图控制器 vc2,但我将子类定义为 UIView 而不是 UIViewController,因为我正在执行一些动画。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
相关资源
最近更新 更多