Bedste svar
UIWindow er en klasse i UIKit, UI-rammen til iOS (og tvOS og watchOS).
Når du starter en app, er den sædvanlige proces til at vise noget at oprette en UIWindow, oprette en UIViewController med den visning, du vil have vist, og indstil derefter “root view controller” i UIWindow til UIViewController.
Hvis du laver en storyboard-baseret app, gøres dette for dig. Du kan indstille “Main Interface”, og den .storyboard-fil indlæses som root view-controller. Du kan få adgang til dette UIWindow i AppDelegate.
Hvis du ikke bruger storyboards, har du brug for noget lignende dette stykke kode
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()
}
i didFinishLaunching-funktionen i AppDelegate for at oprette UIWindow og indstille sin root view-controller til din app i gang. Bemærk, at for at gøre UIWindow synlig på skærmen, skal du bare indstille den som synlig i modsætning til at tilføje den som en undervisning eller placere den i et andet hierarki.
Normalt for at vise andre visningskontrollere end root view-controlleren, kan du præsentere dem modalt eller bruge en navigations- / tabcontroller, så der er ikke rigtig mange grunde til at oprette flere vinduer i din app.
En af grundene kan være at vise en alarm eller har et in-app-underretningssystem, hvor du vil vise et UI-element over alt andet i din app (over selv tastaturet og nogle systemadvarsler tror jeg).
Eller hvis din app rent faktisk drager fordel af to skærme (dvs. via AirPlay), så skal du oprette en ny UIWindow, indstille dens skærm til den sekundære skærm, indstille dens root view-controller og derefter indstille den som synlig.
For direkte adresse dit andet spørgsmål, antager jeg, at du kunne tilføje flere UIWindows som undervisninger af en visningscontrollers visning (som UIWindow underklasse UIView), men det er bestemt ikke, hvordan de normalt bruges, og jeg ved ikke rigtig, hvordan det ville se ud.
Svar
Først og fremmest har UIWindow intet at gøre med Swift. Det er ikke en del af det hurtige sprog på nogen måde form eller form. Det er en del af Apples UIKit-ramme, som i øjeblikket er standard-UI-rammen til iOS (og som snart vil være standard-UI-rammen til MacOS). UIViewController er også en del af UIKit.
En UIWindow er det, der indeholder din apps brugergrænseflade. Det er det, der sender begivenheder fra brugerinteraktioner til dine synspunkter. En typisk iOS-app har en enkelt UIWindow.
En UIViewController indeholder ikke nogen UIWindow objekter og ville være en dårlig designbeslutning, hvis den gjorde det.
Jeg anbefaler at læse dokumentationen: UIKit | Apple Developer Documentation