【问题标题】:How To Present New Controller on Already Presented Controller如何在已经呈现的控制器上呈现新的控制器
【发布时间】:2018-09-07 05:33:26
【问题描述】:

在我的应用程序中,我正在通过自定义相机捕获图像。因此,在捕获图像时,我正在展示控制器,因此它在中心显示相机,并且看起来像捕获图像。 这是它的代码

    let layerVC = cameraLayerViewController(nibName: "cameraLayerViewController", bundle: nil)
            layerVC.modalPresentationStyle = .custom

            Global.appDelegate.window?.rootViewController?.presentedViewController?.present(layerVC, animated: false, completion: nil)

            DispatchQueue.main.asyncAfter(deadline: .now() + 0.4, execute: {

                layerVC.dismiss(animated: false, completion: nil)
}

但是当改变相机模式时,我会在同一个控制器上显示另一个控制器

if (UserDefaults.standard.value(forKey: Global.g_UserDefaultKey.isFrontCamera) as? Bool == true)
    {
        UserDefaults.standard.set(false, forKey: Global.g_UserDefaultKey.isFrontCamera)
        let controller : CameraVC = CameraVC(nibName: "CameraVC", bundle: nil)

        self.present(controller, animated: false, completion: nil)
    }
    else
    {
        UserDefaults.standard.set(true, forKey: Global.g_UserDefaultKey.isFrontCamera)
        let controller : CameraVC = CameraVC(nibName: "CameraVC", bundle: nil)
        self.present(controller, animated: false, completion: nil)
    }

现在,当我在这个控制器上时,我试图展示它不工作的任何控制器。

    let layerVC = cameraLayerViewController(nibName: "cameraLayerViewController", bundle: nil)
            layerVC.modalPresentationStyle = .custom

            Global.appDelegate.window?.rootViewController?.presentedViewController?.present(layerVC, animated: false, completion: nil)

            DispatchQueue.main.asyncAfter(deadline: .now() + 0.4, execute: {

                layerVC.dismiss(animated: false, completion: nil)
}

所以让我知道如何在已经呈现的控制器上呈现控制器。

【问题讨论】:

  • 如果您显示您想要实现的目标的屏幕截图会很有帮助。您也可以解释什么不起作用。我不会投反对票,因为也许是我错过了问题的重点,但我确实建议简化问题(编写专门提出问题的代码,而不是从项目中引入代码,并使其尽可能简单)
  • 试试这个,如果对你有帮助,请告诉我-stackoverflow.com/questions/49424511/…

标签: ios swift uiviewcontroller


【解决方案1】:

从根目录呈现第一个视图控制器:

let root = UIApplication.shared.keyWindow!.rootViewController!
let firstPresented = FirstViewController()
firstPresented.transitioningDelegate = yourPresentationDelegate
firstPresented.modalPresentationStyle = .custom
root.present(firstPresented, animated: false, completion: nil)

对于present第二个视图控制器,你不能再次从根目录present,因为它已经呈现,所以你必须从当前呈现的内容中present(即self):

let secondPresented = SecondViewController()
secondPresented.transitioningDelegate = yourPresentationDelegate
secondPresented.modalPresentationStyle = .custom
self.present(secondPresented, animated: false, completion: nil)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多