presentViewController 正在禁用 UISplitViewController 中的所有 removeFromSuperview 消息

Posted

技术标签:

【中文标题】presentViewController 正在禁用 UISplitViewController 中的所有 removeFromSuperview 消息【英文标题】:presentViewController is disabling all removeFromSuperview messages in a UISplitViewController 【发布时间】:2013-03-08 01:34:52 【问题描述】:

这是 UISplitViewController 的可视化表示:

我正在尝试使用以下方法呈现 UIViewController (myVC),它是 UISplitViewController 的 DetailViewController 内的 UIView 的子视图:

[appDelegate.splitViewController presentViewController:myVC animated:NO completion:nil];

它显示,我关闭它,应用程序顺利旋转,然后当我尝试通过单击 rootViewController(UINavigationController)中的一个单元格来重新加载详细视图时,所有 [orangeUIView removeFromSuperview] 消息都被神秘地禁用(此处隐藏了更多橙色 UIView,它们位于 mainScrollView 内)。顶部工具栏中的“INFO LABEL”正在更新,所以我知道单元格正在发送数据...

如果使用 splitViewController 显示此活动,为什么会禁用 removeFromSuperview?我已经使用 detailViewController 展示了 myVC...

[appDelegate.detailViewController presentViewController:myVC animated:NO completion:nil];

这不会禁用 removeFromSuperview,但会导致各种其他旋转崩溃。

这是怎么回事?

【问题讨论】:

“我正在展示一个 UIViewController,它是 DetailViewController 内较小 UIView 的子视图”——这没有意义。当视图控制器以模态方式呈现时,它占据整个屏幕,它不能是控制器内较小视图的子视图(它不是视图,它是视图控制器)。您需要提供有关您的结构的更多详细信息,以便我们提供帮助。 我已经通过 addSubview 将 myVC.view (Core Plot hostingView) 添加到 UIView 中,在拆分视图的详细信息部分为 500x300...我想全屏显示 myVC (UIViewController) 实例(因为你不能以模态方式呈现 UIView ),它会这样做,然后将 myVC.view 读回它的容器,它会这样做。结构可能会受到 splitViewController 如何处理模式的影响,例如,MainWindow_iPad.xib 的设置被设置为以“当前上下文”呈现,过渡样式为“水平翻转”。这可能是问题的一部分吗? 天哪,我读了两遍,仍然不知道它在说什么。如果您能更清楚地区分 ViewControllers 和 UIViews,这将非常有帮助。您正在使用非常不同的术语,可以互换:“......因为你不能以模态方式呈现 UIView”:嗯,不,你根本不能呈现 UIView。您可以呈现 ViewController,并且可以模态呈现。也许你的意思是你想在你的 ViewController 的根视图中添加一个 UIView 并填充整个根视图?只是不清楚你在做什么或在问什么...... 是的,我认为这是一种滥用。首先,最好使用正确的术语——如果您在谈论视图层次结构,术语是子视图和父视图,而不是子视图和父视图,当视图控制器嵌入另一个视图控制器时,这些术语是用于视图控制器的。正如我上面所说,如果要将视图控制器的视图添加为另一个控制器视图的子视图,则需要将该控制器添加为子视图控制器。如果您想以模态方式呈现它,则必须将其从其父级中删除,然后呈现它,并在您想要它时反转该过程。 顺便说一句,您链接到的那个博客已经过时了,因为 Apple 现在为我们提供了一种自定义容器控制器的方法。您可以在文档“实现自定义容器视图控制器”中了解它们。这就是我说添加某些内容作为子视图控制器时所指的内容。 【参考方案1】:

由于此问题是根据上一个问题创建的,因此该问题的答案是……尝试其他方法。我无法通过展示视图控制器来解决这个问题,很可能是因为我使用了一个自定义的 UISplitViewController,它具有我不想进入的层次结构。

这是我想出的解决方案:

Core Plot - Options on making the graph full screen - addSubview after presenting modal problems

【讨论】:

以上是关于presentViewController 正在禁用 UISplitViewController 中的所有 removeFromSuperview 消息的主要内容,如果未能解决你的问题,请参考以下文章

presentViewController 导致崩溃

PresentViewController 故障排除

如何更改presentViewController过渡动画

PresentViewController iOS 上的 PushView

PresentViewController 在 iOS 中隐藏导航栏

PresentViewController:动画不显示在 iPad 上