Mi az UIWindow a Swiftben? Egy nézetvezérlő tartalmaz több ablakot?


Legjobb válasz

Az UIWindow osztály az UIKit, az iOS (és a tvOS és a watchOS) felhasználói felületének keretrendszere.

Alkalmazás indításakor a megjelenítés szokásos folyamata egy UIWindow létrehozása, egy UIViewController létrehozása a megjeleníteni kívánt nézettel, majd az UIWindow „root view vezérlőjének” beállítása az UIViewControllerre.

Ha storyboard alapú alkalmazást készít, akkor ez megtörténik helyetted. Beállíthatja a „Fő interfészt”, és a .storyboard fájl betöltődik gyökér nézet vezérlőként. Ehhez az UIWindow-hoz az AppDelegate alkalmazásban férhet hozzá.

Ha nem storyboardokat használ, akkor valami ehhez hasonló kódra van szüksége

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()

}

az AppDelegate didFinishLaunching függvényében az UIWindow létrehozásához és a gyökér nézet vezérlőjének beállításához állítsa be az alkalmazást. Ne feledje, hogy az UIWindow láthatóvá tétele a képernyőn csak láthatóként kell beállítania, nem pedig alnézetként vagy más hierarchiába helyezve.

Általában több nézetvezérlő megjelenítése más mint a gyökér nézetvezérlő, modálisan bemutathatja őket, vagy használhat navigációs / fülvezérlőt, így valójában nincs sok oka annak, hogy több ablakot hozzon létre az alkalmazásában.

Ennek egyik oka lehet a figyelmeztetés megjelenítése vagy rendelkezzen alkalmazáson belüli értesítési rendszerrel, ahol az UI elemet szeretné megjeleníteni az alkalmazás minden más fölött (még a billentyűzet felett is, és úgy gondolom, hogy egyes rendszer figyelmeztetések).

Vagy ha az alkalmazás valóban kihasználja két képernyőt (azaz az AirPlay-n keresztül), akkor létre kell hoznia egy új UIWindow-t, a képernyőjét a másodlagos képernyőre kell állítania, be kell állítania a gyökér nézet vezérlőjét, majd láthatónak kell állítania.

Közvetlen címzéshez a második kérdésed, feltételezem, hogy több UIWindows-ot is felvehet a nézetvezérlő nézetének alnézeteként (mint Az UIWindow az UIView alosztályt csinálja, de természetesen nem így szokták használni őket, és nem is igazán tudom, hogy nézne ki ez.

Válasz

Először is, az UIWindow-nak nincs semmi hogy köze legyen Swifthez. Semmilyen formában vagy formában nem része a Swift nyelvnek. Az Apple UIKit keretrendszerének része, amely jelenleg az iOS alapértelmezett felhasználói felületének keretrendszere (és amely hamarosan a MacOS alapértelmezett felhasználói felületének kerete lesz). Az UIViewController szintén az UIKit része.

Az UIWindow az alkalmazás felhasználói felületét tartalmazza. Ez az, ami a felhasználói interakciós eseményeket az Ön nézeteihez rendeli. Egy tipikus iOS-alkalmazás egyetlen UIWindow-val rendelkezik.

Az UIViewController nem tartalmaz semmilyen UIWindow objektumok, és rossz tervezési döntés lenne, ha mégis megtenné.

Javaslom a dokumentáció elolvasását: UIKit | Apple fejlesztői dokumentáció

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük