1. ホーム
  2. objective-c

[解決済み] iOSアプリケーションの最上位ビュー/ウィンドウへの参照取得

2023-01-09 22:57:16

質問

iOSアプリケーションで通知を表示するための再利用可能なフレームワークを作成しています。私は、通知ビューが、UIAlertView のような、アプリケーション内の他のすべての上に追加されることを望みます。NSNotificationイベントをリッスンし、それに応じてビューを追加するマネージャを開始するとき、アプリケーションの最上位のビューへの参照を取得する必要があります。これは、私が現時点で持っているものです。

_topView = [[[[UIApplication sharedApplication] keyWindow] subviews] lastObject];

これはどのiOSアプリケーションでも使えるのでしょうか、それともトップビューを得るためのもっと安全で良い方法があるのでしょうか?

どのように解決するのですか?

通常、これでトップビューを得ることができますが、それがユーザーに見えるという保証はありません。画面外にあったり、アルファ値が 0.0 であったり、サイズが 0x0 であったりする可能性があります。

keyWindow にサブビューがない可能性もあるので、最初にそれをテストする必要があります。これは珍しいことですが、不可能ではありません。

UIWindowはUIViewのサブクラスなので、通知がユーザーに見えることを確認したい場合、keyWindowに直接追加することができます。 addSubview: を使用すると、即座に最上位のビューになります。しかし、これがあなたが求めていることなのかどうかはわかりません。(質問からすると、すでにご存知のようですが)。