ベストアンサー
UIWindowは、iOS(およびtvOSとwatchOS)のUIフレームワークであるUIKitのクラスです。
アプリを起動するとき、何かを表示する通常のプロセスは、UIWindowを作成し、表示するビューでUIViewControllerを作成してから、UIWindowの「ルートビューコントローラー」をUIViewControllerに設定することです。
ストーリーボードベースのアプリを作成している場合、これは自動的に行われます。 「メインインターフェース」を設定すると、その.storyboardファイルがルートビューコントローラーとして読み込まれます。このUIWindowにはAppDelegateでアクセスできます。
ストーリーボードを使用していない場合は、このコードのようなものが必要です
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()
}
AppDelegateのdidFinishLaunching関数で、UIWindowを作成し、そのルートビューコントローラーをアプリに設定します。 UIWindowを画面に表示するには、サブビューとして追加したり、他の階層に配置したりするのではなく、表示として設定する必要があることに注意してください。
通常、他のビューコントローラをさらに表示するルートビューコントローラーよりも、モーダルで表示したり、ナビゲーション/タブコントローラーを使用したりできるため、アプリでウィンドウを増やす理由はそれほど多くありません。
アラートを表示する理由の1つは、または、アプリ内通知システムを使用して、アプリ内の他のすべての上にUI要素を表示したい場合(キーボードやいくつかのシステムアラートよりも上)
または、アプリが実際に利用している場合2つの画面(つまりAirPlay経由)の場合は、新しいUIWindowを作成し、その画面をセカンダリ画面の画面に設定し、ルートビューコントローラーを設定してから、表示されるように設定する必要があります。
直接アドレス指定するには2番目の質問ですが、複数のUIWindowsをビューコントローラーのビューのサブビューとして追加できたと思います( UIWindowはUIViewをサブクラス化します)が、それは確かにそれらが通常使用される方法ではなく、それがどのように見えるかは本当にわかりません。
回答
まず、UIWindowには何もありませんスイフトと関係があります。形や形を問わず、Swift言語の一部ではありません。これは、AppleのUIKitフレームワークの一部であり、現在iOSのデフォルトのUIフレームワークです(まもなくMacOSのデフォルトのUIフレームワークになります)。 UIViewControllerもUIKitの一部です。
UIWindowは、アプリのユーザーインターフェースを含むものです。これは、ユーザーインタラクションイベントをビューにディスパッチするものです。一般的なiOSアプリには単一のUIWindowがあります。
UIViewControllerには は含まれていません UIWindowオブジェクトであり、そうすると設計上の決定が不適切になります。
ドキュメントを読むことをお勧めします: UIKit | Appleデベロッパドキュメント