Je rencontre un problème dans Xcode 11 beta.
Le problème est que je ne reçois pas la variable window
par défaut déclarée dans le fichier AppDelegate
.
Quelqu'un est-il confronté à ce même problème?
La fenêtre var par défaut: UIWindow? Est maintenant déplacé dans SceneDelegate.Swift. Pour définir un rootViewController dans Xcode 11, vous pouvez travailler dans le fichier SceneDelegate.Swift. Dans le délégué de scène, vous devez créer l'instance de fenêtre et le contrôleur de vue racine comme ci-dessous:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
// set or create your viewController here
let yourViewController = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(identifier: "yourViewController") as! YourViewController
// set the rootViewController here using window instance
self.window?.rootViewController = yourViewController
}
Cette réponse est également utile: Pourquoi la configuration manuelle du contrôleur de vue racine affiche-t-elle un écran noir?
J'espère que cela vous aidera!
Dans mon cas, c'est tout ce qu'il faut.
var window: UIWindow? // add this by yourself
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: Device.bounds)
let root = DDTabBarController()
window?.rootViewController = root
window?.makeKeyAndVisible()
return true
}
Mon approche:
tout d'abord, dans AppDelegate, créez une propriété statique avec la classe du contrôleur de vue auquel vous souhaitez accéder, comme ceci
class AppDelegate: UIResponder, UIApplicationDelegate {
// MARK: Home
static var homeViewController: HomeViewController?
...
}
puis, dans le contrôleur de vue
// MARK: - Managing the view
override func viewDidLoad() {
super.viewDidLoad()
// Singleton
AppDelegate.homeViewController = self
...
}
comment utiliser:
extension UIViewController {
var homeViewController: HomeViewController? {
if let controller = self as? HomeViewController {
return controller
}
return AppDelegate.homeViewController
}
}