swift - 模态控制器在关闭时仍然是最顶层的视图控制器
问题描述
我必须查看控制器:ContainerController、主视图控制器和 VC2。VC2 从 ContainerController 以模态方式呈现。当点击 VC2 中的按钮时,VC2 被关闭,我们回到 ContainerController。但似乎即使被解雇,最顶层的视图控制器仍然是 VC2,而不是 ContainerController。为什么会这样?然后,当我尝试呈现像 SFsafaryVC 这样的 vc 时,我收到一个错误:
尝试在 /ContainerController: 0x1110074c0/ 上呈现 /SFSafariViewController: 0x10481a000/ 其视图不在窗口层次结构中
如何从最顶层的视图控制器中删除 VC2?或者我怎样才能让 ContainerController 回到栈顶?
这是一些代码:
容器控制器:
class ContainerController: UIViewController {
var isBackFromCV2: Bool = false
override func viewDidLoad() {
super.viewDidLoad()
if isBackFromCV2 {
backFromVC2()
}
}
[...]
func toVC2() {
let vc = VC2()
self.present(vc, animated: true)
}
func backFromVC2() {
//some code for azure client login using SFSafariVC - needs to be presented from ContainerController
client.login(withProvider: "", urlScheme: "myApp", controller: self, completion: loginBlock)
//I tried to get the topController to check which controller is presenting
if var topController = UIApplication.shared.keyWindow?.rootViewController
{
while (topController.presentedViewController != nil)
{
topController = topController.presentedViewController!
print(topController) //always prints VC2
}
}
}
}
和 VC2 :
class VC2 : UIViewController {
let containerController = ContainerController()
[...]
func onClick() {
self.dismiss(animated: true, completion: nil)
self.containerController.isBackFromVC2 = true
}
}
解决方案
我终于通过将 rootViewController 设置为 ContainerController 解决了这个问题。
在容器控制器中:
func backFromVC2() {
let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
appDelegate.window?.rootViewController = self
client.login(withProvider: "yourProvider", urlScheme: "myApp", controller: self, completion: loginBlock)
}
它工作正常!:)
推荐阅读
- php - PHP循环多维数组上的每个值X次
- css - Bootstrap 4如何在容器流体内垂直对齐
- react-native - 仅使平面列表标题的一部分具有粘性
- android - CollapsingToolbarLayout中如何改变materialToolbar的颜色?
- filesystems - macFuse 需要 Mac OS 11+ 上的恢复模式
- react-native - 为什么 Metro Bundler 声称 app.json 不存在?
- python - Python,我希望用户输入文本文件
- html - “标记”类型上不存在属性“_popup”
' - xml - 这个带有 PI(处理指令)的 XML 有什么问题?
- pentaho - pentaho 依次执行多个sql脚本