ios - 在当前 vc 之上呈现 vc 后,第二次出现白屏。第一次没收到

标签 ios swift iphone xcode uiviewcontroller

在我从我的非 UIViewController 类(我的接口(interface)类,来 self 的 cocoa 类)获取值(我正在使用通知中心)到我的 session vc 后,我试图显示我的 session vc。

现在,我的 session vc 第一次在我当前的顶级 vc 上正确显示。但第二次之后,我只看到白屏。但是我的 session vc 中的值、api 调用仍在运行。我可以在控制台中看到。

TopView.swift:

import UIKit

public extension UIWindow {
    public var visibleViewController: UIViewController? {
        return UIWindow.getVisibleViewControllerFrom(vc: self.rootViewController)
    }

    public static func getVisibleViewControllerFrom(vc: UIViewController?) -> UIViewController? {
        if let nc = vc as? UINavigationController {
            return UIWindow.getVisibleViewControllerFrom(vc: nc.visibleViewController)
        } else if let tc = vc as? UITabBarController {
            return UIWindow.getVisibleViewControllerFrom(vc: tc.selectedViewController)
        } else {
            if let pvc = vc?.presentedViewController {
                return UIWindow.getVisibleViewControllerFrom(vc: pvc)
            } else {
                return vc
            }
        }
    }
}

func getTopViewController() -> UIViewController? {
    let appDelegate = UIApplication.shared.delegate
    if let window = appDelegate!.window {
        return window?.visibleViewController
    }
    return nil
}

我的应用程序委托(delegate):

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

 NotificationCenter.default.addObserver(self, selector: #selector(AppDelegate.onOver(notification:)), name: NSNotification.Name(rawValue: "openBoard"), object: nil);


}

@objc func onGameOver(notification: NSNotification)
    {
   if let score = notification.object as? NSDictionary
        {


                    let storyBoard = UIStoryboard.init(name: "Trai", bundle: nil);
                    if let sessionvc = storyBoard.instantiateViewController(withIdentifier:
                        "sessionvc") as? sessionvc{


                        if let topVC = getTopViewController() {
                            //topVC.dismiss(animated: true, completion: nil)
                            topVC.present(sessionvc, animated: true)
                        }

                }

        }
    }

第一次我不明白。但从第二次开始,如果我尝试做同样的事情,我会看到白屏,但仍然是我的 sessionvc 数据,并且所有内容都加载在我的控制台中。对此有任何帮助

最佳答案

可能是重播晚了。如果对您有帮助,请告诉我。

更改您的方法@objc func onGameOver(notification: NSNotification)

if let topVC = getTopViewController() {

  let Yourvc = YourViewController()
  topVC = Yourvc
  topVC.present(topVC, animated: true)

 }

或者你可以尝试这个方法:

if var topVC = getTopViewController() {

  self.window?.rootViewController = topVC
  topVC.present(scoreBoardController, animated: true)

}

尝试让我知道它是否有效。

关于ios - 在当前 vc 之上呈现 vc 后,第二次出现白屏。第一次没收到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56521102/

相关文章:

ios - 条件中对 "<"的模糊引用 | swift

macos - 在 Swift 中创建文件夹

iOS CLLocation 高度场 - 椭圆体还是大地水准面?

ios - 将 textView 高度设置为等于 contentSize swift

iOS:Swift:未调用 UISlider editingDidEnd

ios - 在关闭模态视图 Controller 的动画时访问 presentingViewController

iphone - Obj-C,迎合 'tap for more rows'并删除无核心数据?

ios - 如何使用自动布局平均分配 UIButton

ios - Visual Studio Xamarin - 仅适用于 ios 9.3 的框架

ios - Xcode 中的链接器命令失败