4 つUIView
の s:viewA
がルート ビューで、vhich がviewB
そのサブビューです。viewB
has viewC
as its subview and viewC
has viewD
as its subview. したがって、4 つのビューの階層があります。viewD
基本的には、タップして何かを実行できるボタンです。データベースを操作するため、時間がかかる場合があります。そのため、中央に がある暗い不透明UIView
でUIActivityIndicator
、ユーザーにしばらく待つように指示し、問題を引き起こす可能性のある他のタップ操作を防ぐ必要があります。viewA
ただし、画面全体をカバーするには、暗いビューを配置する必要があります。これが私が試した(そして成功した)ものですが、もっと簡単な方法があるかどうか知りたいです。
viewA
からviewD
のアクセスviewD.superview.superview.superview
。ただし、階層が変更されると、このチェーンが変更される可能性が高いため、あまり柔軟ではありません。委任を使用します。
viewD.delegate = viewA
. ただし、viewD
はviewC
(その直接のスーパービュー) によって作成されviewB
、 によって作成され、 によって作成されviewA
ます。したがって、viewD
、viewC
、およびviewB
が@property
それぞれのスーパークラスでviewA.viewB.viewC.viewD
はない場合 ( by によるアクセスが不可能)、viewA
へのポインターを持つことができずviewD
、委任が不可能になります (私が理解している限り)。を使用し
NSNotification
ます。通知を投稿viewD
し、オブザーバーにします。しかし、放送に使われますよね?そのため、やや不適切です。@"ActivityIndicatorShouldBePutOn"
viewA
NSNotification
この場合 (ダーク マスクが画面全体に配置されている場合) に限り、関連する何かを使用し
UIApplication
て画面にアクセスし、直接その上に配置できます。しかし、別の目的で画面の一部にのみ配置したい場合、これは機能しません。
ですから、もっと良い方法はないか、または上記の方法が標準的な方法であるかどうかを尋ねたいと思います。