【问题标题】:Present view over parent View Controller在父视图控制器上呈现视图
【发布时间】:2017-03-19 00:33:38
【问题描述】:

我有一个名为 PagingViewController 的 VC(它是一个带有分页 UIScrollView 的 UIViewController),它有 3 个子 VC,我们称它们为 VC-1、VC-2 和 VC-3。

我正在子 VC-1 内部进行网络调用,在此期间我想覆盖屏幕上的所有内容,包括父 PagingViewController。 我将如何以不违反 MVC 架构的方式执行此操作?我还应该为加载屏幕提供 UIView 或 UIViewController 以覆盖父级吗?

我尝试过使用UIWindow,但这似乎是一个 hack,但不确定是否是

更新 1

除了我上面提到的UIWindow,另一种从孩子那里遮住父母屏幕的方法是:self.parent.view.addSubview(myCustomView)。我担心的是孩子正在进入父母的观点并为其添加观点。这对我来说似乎违反了什么(我可能是错的)

【问题讨论】:

  • 您正在描述一个完全普通的全屏呈现视图控制器。有什么问题?
  • @matt 我更新了我的问题。请注意我如何提到孩子正在进入父母以添加视图。在另一个例子中,我会伸手去拿 UIWindow,这对我来说似乎也是错误的。 (或者也许这两种方法都适用于 MVC)
  • 如果我展示一个 VC 而不是一个 UIView,那么我认为这很简单,因为你只需执行 present.. (view controller).. 但是对于 UIView,很难展示一些内容你父母的看法也是如此
  • "但是对于 UIView,它也很难显示一些东西来覆盖你父母的视图" 问题是你不能交错来自不同视图控制器的视图。但是呈现的视图控制器的视图覆盖所有内容,这正是您想要的,那为什么不是解决方案呢?
  • 你什么都没解释。全屏呈现的视图控制器的视图将涵盖所有内容,其背后的任何内容都无法进行用户交互,问题已解决,完全标准,比 Fahim 提出的非法第二个窗口要好得多。

标签: ios objective-c swift uiview uiviewcontroller


【解决方案1】:

如果 UIWindow 方法适合你,我会说去吧 :) 但是你应该能够显示来自子 VC-1 或父视图的视图(这将是 PagingViewController 的视图 -如果它显示任何 UI)也覆盖视图的整个区域。就个人而言,我会说这两种方法都可以,具体取决于您想要做什么。

【讨论】:

  • 我明白了,谢谢!如果我执行self.parent?.view.addSubview(myCustomView) 之类的操作,那么self 在这种情况下是VC-1,即子视图控制器。 parentPagingViewController。这是一个糟糕的架构吗?就像它违反 MVC 一样?
  • 我可能不是问您是否对“标准”感兴趣的合适人选:) 我不会尝试遵循每条规则或标准。我会根据适合我当前情况的代码进行编码,只要它不会创建无法维护的代码或创建其他会使应用程序成为糟糕应用程序的问题。在这种情况下,按照您的建议使用子视图可能比使用 UIWindow 更容易,通常,这就是我想要的:)
  • 当然 :) 我想我正在以某种方式考虑标准 - 你所说的确实有道理,如果它工作为什么不工作并且这是可维护的。我将看看它是如何发挥作用的,并对它是否以任何方式违反 mvc 进行更多研究
  • 就个人而言,我认为不会有任何 MVC 问题,因为您正在从另一个视图中显示一个视图。但我跟不上 MVC 设计的所有复杂性。所以我可能错了:)另外,如果您认为答案对您有所帮助,您能否将其标记为“正确”? (当然,除非你认为它不是……:D)
  • Kk,我只是赞成它,因为它对我们非常有帮助 :) 对不起,如果我不是很清楚关于使用标准架构的问题,希望有人会对此表示赞同——如果不是然后将其标记为正确:)
猜你喜欢
  • 2012-12-03
  • 2012-03-16
  • 1970-01-01
  • 2014-11-17
  • 2016-06-08
  • 1970-01-01
  • 2015-07-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多