SwiftのUIWindowとは何ですか? 1つのViewControllerに複数のウィンドウが含まれていますか?


ベストアンサー

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デベロッパドキュメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です