0

4 つUIViewの s:viewAがルート ビューで、vhich がviewBそのサブビューです。viewBhas viewCas its subview and viewChas viewDas its subview. したがって、4 つのビューの階層があります。viewD基本的には、タップして何かを実行できるボタンです。データベースを操作するため、時間がかかる場合があります。そのため、中央に がある暗い不透明UIViewUIActivityIndicator、ユーザーにしばらく待つように指示し、問題を引き起こす可能性のある他のタップ操作を防ぐ必要があります。viewAただし、画面全体をカバーするには、暗いビューを配置する必要があります。これが私が試した(そして成功した)ものですが、もっと簡単な方法があるかどうか知りたいです。

  1. viewAからviewDのアクセスviewD.superview.superview.superview。ただし、階層が変更されると、このチェーンが変更される可能性が高いため、あまり柔軟ではありません。

  2. 委任を使用します。viewD.delegate = viewA. ただし、viewDviewC(その直接のスーパービュー) によって作成されviewB、 によって作成され、 によって作成されviewAます。したがって、viewDviewC、およびviewB@propertyそれぞれのスーパークラスでviewA.viewB.viewC.viewDはない場合 ( by によるアクセスが不可能)、viewAへのポインターを持つことができずviewD、委任が不可能になります (私が理解している限り)。

  3. を使用しNSNotificationます。通知を投稿viewDし、オブザーバーにします。しかし、放送に使われますよね?そのため、やや不適切です。@"ActivityIndicatorShouldBePutOn"viewANSNotification

  4. この場合 (ダーク マスクが画面全体に配置されている場合) に限り、関連する何かを使用しUIApplicationて画面にアクセスし、直接その上に配置できます。しかし、別の目的で画面の一部にのみ配置したい場合、これは機能しません。

ですから、もっと良い方法はないか、または上記の方法が標準的な方法であるかどうかを尋ねたいと思います。

4

3 に答える 3

2

この API MBProgressHUDをお勧めします。見栄えが良く、使いやすいです。

ここに画像の説明を入力

activityIndi​​cator の表示

[MBProgressHUD showHUDAddedTo:self.view animated:YES];

削除する

[MBProgressHUD hideHUDForView:self.view animated:YES];
于 2013-07-29T15:39:12.000 に答える
2

アクティビティ インジケーター ビューをメイン ウィンドウに追加できます。以下を使用して keyWindow を取得できます。

[[UIApplication sharedApplication] keyWindow];
于 2013-07-29T15:21:18.227 に答える
1

ブロードキャストであってもオプション 3 を使用できます。1 人のオブザーバーのみで聞くことができます。次に、UIViewごとに異なる通知を行うだけです

エレガントではないかもしれませんが、それは間違いではありませんが、最も簡単で保証された修正だと思います。

于 2013-07-29T15:21:12.593 に答える