Tengo un testVC. TestVC no tiene guión gráfico, este viewController tiene un archivo XIB. Muestro este VC cuando no tengo Internet. Y lógica para un programa de este VC como este:

 let getVC = NoInternetConnectionVC(nibName: "NoInternetConnectionView", bundle: nil)
        if let getWindow = self.window {
            getVC.view.tag = 501
            getVC.view.frame = getWindow.bounds
            getWindow.addSubview(getVC.view)
        }

También tengo extensión para UIViewController

extension UIViewController {
     var appDelegate: AppDelegate {
     return UIApplication.shared.delegate as! AppDelegate
 }
 
 var sceneDelegate: SceneDelegate? {
     guard let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
         let delegate = windowScene.delegate as? SceneDelegate else { return nil }
      return delegate
 }
}

extension UIViewController {
 var window: UIWindow? {
     if #available(iOS 13, *) {
         guard let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
             let delegate = windowScene.delegate as? SceneDelegate, let window = delegate.window else { return nil }
                return window
     }
     
     guard let delegate = UIApplication.shared.delegate as? AppDelegate, let window = delegate.window else { return nil }
     return window
 }
}

Todos los clics en TestVC funcionan si muestro este controlador de vista así:

navController.pushViewController(NoInternetConnectionVC(nibName: "NoInternetConnectionView", bundle: nil), animated: true)

Pero no me queda bien. Necesito mostrar NoInternetConnectionVC como describí anteriormente, es decir, así. Cuando muestro NoInternetConnectionVC como a continuación, todos mis oyentes se detienen a trabajar

 let getVC = NoInternetConnectionVC(nibName: "NoInternetConnectionView", bundle: nil)
            if let getWindow = self.window {
                getVC.view.tag = 501
                getVC.view.frame = getWindow.bounds
                getWindow.addSubview(getVC.view)
            }

Intenté agregar la línea isUserInteractionEnabled a mi código, así

if let getWindow = self.window {
            getVC.view.tag = 501
            getVC.view.isUserInteractionEnabled = true //added line
            getVC.view.frame = getWindow.bounds
            getWindow.addSubview(getVC.view)
        }

Pero no funciona

-1
lqsdwtxkzlqafpvluq 20 ene. 2021 a las 13:41

1 respuesta

La mejor respuesta

Lo acaba de agregar como una subvista. Después de agregar la subvista, mueva su controlador a padre.

if let root = UIApplication.shared.windows.first?.rootViewController {
    root.addChild(getVC)
    getVC.didMove(toParent: root)
}
1
Raja Kishan 20 ene. 2021 a las 11:02