Il n'est pas rare de vouloir afficher un écran en particulier lors du premier lancement d'une application mobile. C'était mon cas, et voilà comment j'ai procédé :
1. Le Soryboard
Dans le fichier Main.storyboard
j'ai défini 2 ViewController :

- Le premier Start View Controller correspond à l'écran que je souhaite afficher lors du premier lancement. Je lui ai attribué l'identifiant
StartViewControllerID
. - Le second Home View Controller sera mon premier écran lors de tous les autres lancements de l'application. Son identifiant est
HomeViewControllerID
.
2. Le Code
Dans le fichier SceneDelegate.swift
, on va sauvegarder un booléen nous indiquant que le premier lancement de l'application a déjà eu lieu. Nous allons, à chaque lancement, récupérer ce booléen pour définir le comportement a adopter. Bien sur, lors du premier lancement, ce booléen n'existera pas et sa valeur sera donc false
.
// SceneDelegate.swift
import UIKit
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
// Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
// If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
// This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
guard let _ = (scene as? UIWindowScene) else { return }
let firstLaunchOccurred = UserDefaults.standard.bool(forKey: "FirstLaunchOccurred")
let storyboard = UIStoryboard(name: "Main", bundle: nil)
if firstLaunchOccurred {
// Show the HomeViewController
self.window?.rootViewController = storyboard.instantiateViewController(withIdentifier: "HomeViewControllerID")
} else {
// Show StartViewController only on first launch
self.window?.rootViewController = storyboard.instantiateViewController(withIdentifier: "StartViewControllerID")
UserDefaults.standard.set(true, forKey: "FirstLaunchOccurred")
}
}
...
}
- Partager sur