如何在模态呈现的视图控制器上执行呈现模态转场?
How can I perform a present modally segue on a view controller that is presented modally?
这听起来有点奇怪。
我有一个视图控制器,我们称它为 VC1
,它以形式呈现 sheet。
当用户点击 VC1
中的按钮时,选择器会显示为一个操作 sheet。当用户选择特定项目并点击 "Done" 操作 sheet 时,我想以模态方式呈现另一个 VC (VC2
)。
让我告诉你动作sheet:
所以我添加了一个连接 VC1
和 UINavigationController
的 "Present Modally" segue。这个 UINavigationController
有 VC2
作为它的根视图控制器。 segue 有一个 "Form Sheet" 的演示文稿和一个 "Flip Horizontal" 的演示文稿。
当我测试我的应用程序时,此警告出现在控制台中并且根本没有显示任何视图控制器:
Warning: Attempt to present on which is already presenting (null)
我当时想 "What the heck is it talking about? How can VC1
be presenting null?" 奇怪的是它使用 null
(这是 C# 和 Java 的术语)而不是 nil
(Swift 使用)。
我尝试了不同的过渡和演示。但是出现相同的消息。我还尝试删除 UINavigationController
并直接呈现 VC2
。这次,错误消息变为:
Warning: Attempt to present on which is already presenting (null)
如何以模态方式呈现 VC2
?
经过一些尝试,我发现像这样调用 dispatch_after
并执行 segue 可以解决问题。不过我不知道为什么。
dispatch_after(DISPATCH_TIME_NOW, dispatch_get_main_queue()) {
self.performSegueWithIdentifier("someIdentifier", sender: self)
}
也许这是由于某种动作 sheet 魔法。
这听起来有点奇怪。
我有一个视图控制器,我们称它为 VC1
,它以形式呈现 sheet。
当用户点击 VC1
中的按钮时,选择器会显示为一个操作 sheet。当用户选择特定项目并点击 "Done" 操作 sheet 时,我想以模态方式呈现另一个 VC (VC2
)。
让我告诉你动作sheet:
所以我添加了一个连接 VC1
和 UINavigationController
的 "Present Modally" segue。这个 UINavigationController
有 VC2
作为它的根视图控制器。 segue 有一个 "Form Sheet" 的演示文稿和一个 "Flip Horizontal" 的演示文稿。
当我测试我的应用程序时,此警告出现在控制台中并且根本没有显示任何视图控制器:
Warning: Attempt to present on which is already presenting (null)
我当时想 "What the heck is it talking about? How can VC1
be presenting null?" 奇怪的是它使用 null
(这是 C# 和 Java 的术语)而不是 nil
(Swift 使用)。
我尝试了不同的过渡和演示。但是出现相同的消息。我还尝试删除 UINavigationController
并直接呈现 VC2
。这次,错误消息变为:
Warning: Attempt to present on which is already presenting (null)
如何以模态方式呈现 VC2
?
经过一些尝试,我发现像这样调用 dispatch_after
并执行 segue 可以解决问题。不过我不知道为什么。
dispatch_after(DISPATCH_TIME_NOW, dispatch_get_main_queue()) {
self.performSegueWithIdentifier("someIdentifier", sender: self)
}
也许这是由于某种动作 sheet 魔法。