Beste Antwort
UIWindow ist eine Klasse in UIKit, dem UI-Framework für iOS (und tvOS und watchOS). P. >
Wenn Sie eine App starten, müssen Sie normalerweise ein UIWindow erstellen, einen UIViewController mit der Ansicht erstellen, die Sie anzeigen möchten, und dann den „Root View Controller“ des UIWindow auf den UIViewController setzen.
Wenn Sie eine Storyboard-basierte App erstellen, wird dies für Sie erledigt. Sie können die „Hauptschnittstelle“ festlegen, und diese .storyboard-Datei wird als Root-View-Controller geladen. Sie können in AppDelegate auf dieses UIWindow zugreifen.
Wenn Sie keine Storyboards verwenden, benötigen Sie so etwas wie diesen Code.
var window: UIWindow?
func application(\_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
let vc = CustomViewController()
window?.rootViewController = vc
window?.makeKeyAndVisible()
}
in der didFinishLaunching-Funktion von AppDelegate, um das UIWindow zu erstellen und den Root-View-Controller so einzustellen, dass Ihre App läuft. Beachten Sie, dass Sie das UIWindow nur sichtbar machen müssen, um es auf dem Bildschirm sichtbar zu machen, anstatt es als Unteransicht hinzuzufügen oder in einer anderen Hierarchie zu platzieren.
Normalerweise, um mehr andere Ansichtscontroller anzuzeigen Als Root-Ansichts-Controller können Sie sie modal darstellen oder einen Navigations- / Registerkarten-Controller verwenden. Es gibt also nicht viele Gründe, mehr Fenster in Ihrer App zu erstellen.
Ein Grund könnte sein, dass eine Warnung angezeigt wird oder Sie haben ein In-App-Benachrichtigungssystem, in dem Sie ein UI-Element über allem anderen in Ihrer App anzeigen möchten (sogar über der Tastatur und einigen Systemwarnungen, glaube ich).
Oder wenn Ihre App tatsächlich davon profitiert Bei zwei Bildschirmen (dh über AirPlay) müssten Sie ein neues UIWindow erstellen, den Bildschirm auf den des sekundären Bildschirms einstellen, den Root-View-Controller festlegen und dann als sichtbar festlegen.
Zum direkten Adressieren Ihre zweite Frage, ich nehme an, Sie könnten mehrere UIWindows als Unteransichten der Ansicht eines View Controllers hinzufügen (as UIWindow hat eine Unterklasse (UIView), aber so werden sie normalerweise nicht verwendet, und ich weiß nicht wirklich, wie das aussehen würde.
Antwort
Zunächst einmal hat UIWindow nichts mit Swift zu tun. Es ist in keiner Weise Teil der Swift-Sprache. Es ist Teil des UIKit-Frameworks von Apple, das derzeit das Standard-UI-Framework für iOS ist (und in Kürze das Standard-UI-Framework für MacOS sein wird). UIViewController ist auch Teil von UIKit.
Ein UIWindow enthält die Benutzeroberfläche Ihrer App. Dadurch werden Benutzerinteraktionsereignisse an Ihre Ansichten gesendet. Eine typische iOS-App verfügt über ein einziges UIWindow.
Ein UIViewController enthält keine UIWindow-Objekte und wäre eine schlechte Entwurfsentscheidung, wenn dies der Fall wäre.
Ich empfehle, die Dokumentation zu lesen: UIKit | Apple Developer Documentation