【问题标题】:Modal view that does not prevent access to parent不阻止访问父级的模态视图
【发布时间】:2018-05-11 09:28:37
【问题描述】:

我正在尝试创建两个 ViewController 解决方案,其中模式视图控制器显示在 UICollectionView 上,同时允许用户与 CollectionView 交互。在这种情况下,它就像一个高级选择器,允许用户在保存记录之前选择将填充模式视图中的属性的项目。

我有一个演示控制器设置来以我想要的方式和位置呈现视图,从而允许对父视图的完全可见性。我尝试过的任何操作都不允许用户与 UIController 视图进行交互(滚动、点击等)。

在视图调试中,我看到一个 UITransitionView 的框架等于全屏。 (见图)我怀疑这是罪魁祸首。这在 iOS 中是否可行?

【问题讨论】:

    标签: ios cocoa-touch uiview uiviewcontroller


    【解决方案1】:

    模态视图控制器的全部意义在于它接管了屏幕并要求用户在做任何其他事情之前对其做出响应。它将您的程序置于必须在用户继续之前关闭的“模式”。这就是模态对话框的核心原因。

    如果可以与视图控制器交互,那么顶视图控制器就不再是模态的了。

    从人机界面的角度来看,您尝试做的事情是错误的,并且不受应用程序框架的支持。您需要重新考虑您的设计。

    编辑:

    顶级视图控制器并非旨在共享屏幕。如果您希望另一个视图控制器覆盖屏幕的一部分,而用户仍然可以与下面的视图控制器进行交互,那么您应该使用容器视图,正如@МаксудДаудов 在他的回答中所建议的那样。

    我可能会在我的视图控制器的其余内容之上放置一个容器视图,将嵌入 segue 控制拖动到我要显示的子视图控制器,向容器视图添加一个出口,然后隐藏容器查看。

    当您想要显示“选择器”时,您可以取消隐藏容器视图,这将显示内部的子视图并让用户与之交互,同时仍然能够与您的其他组件进行交互主视图控制器。

    【讨论】:

    • 感谢您的解释。我认为这与苹果目前对 iOS 邮件应用程序所做的没有太大不同。它允许用户向下滑动新消息 VC 以访问其他邮件内容。此设计仅添加一个将选定记录发送到呈现视图的委托。也许模态视图和表示控制器是错误的方法,但我不同意从人机界面的角度来看这是错误的。
    【解决方案2】:

    没有办法允许呈现的全屏视图控制器在其下与视图控制器交互。相反,在第一个部分的 containercontroller 中添加您的第二个视图控制器,并相应地更改第一个 VC 集合视图框架,以便能够查看所有列表。这样做,您将有两个视图控制器一起工作

    【讨论】:

    • 谢谢。那么在这种情况下,第二个 VC 将是 UICollectionVC 的子级?
    • @BBruce,是的,它是子视图控制器。
    猜你喜欢
    • 1970-01-01
    • 2015-06-21
    • 2014-01-17
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 2011-05-11
    相关资源
    最近更新 更多