23

2つのビューを含むビューがあります。それらのビューの1つには、2つのボタンといくつかのテキストラベルが含まれています。もう1つは、アルファが0.25に設定されておりUIActivityIndicatorView、アプリが機能していることをユーザーに通知するためのものであり、ユーザーはアプリが終了するまで待つ必要があります。UIActivityIndicatorViewが回転しているときにユーザーがボタンに触れると、UIActivityIndicatorView停止すると、アプリはユーザーのアクションを記憶し、それに応答します。UIActivityIndicatorViewが回転している間に発生するユーザーインタラクションを破棄するにはどうすればよいですか?

読んでくれてありがとう。

PD:このスレッドでコメントされているように、私はモーダルソリューションを使用しないことを好みます。

編集:

私は現在このコードを使用していますが、正しく機能しません。

- (void)viewDidAppear:(BOOL)animated {

  // The view appears with an UIActivityIndicatorView spinning.
  [self showResults]; // The method that takes a long time to finish.
  [self.activityIndicator stopAnimating];
  // When the showResults method ends, the view shows the buttons to the user.
  [self.activityIndicatorView setHidden:YES];
  [self.menuButton setEnabled:YES];
  [self.menuButton setUserInteractionEnabled:YES];
  [self.playButton setEnabled:YES];
  [self.playButton setUserInteractionEnabled:YES];
  [self.view setUserInteractionEnabled:YES];
  [self.interactionView setUserInteractionEnabled:YES];
}
4

11 に答える 11

113

私はこれらの方法が非常に便利だと思いました:

[[UIApplication sharedApplication] beginIgnoringInteractionEvents];

[[UIApplication sharedApplication] endIgnoringInteractionEvents];
于 2013-05-17T12:41:34.873 に答える
7

Swift 3.0でインタラクションを無効にするには:-

UIApplication.shared.beginIgnoringInteractionEvents()

相互作用を復元するには:-

UIApplication.shared.endIgnoringInteractionEvents()
于 2017-01-31T10:12:41.293 に答える
4
[_button setUserInteractionEnabled:NO];

それはそれを無効にするはずです、あなたがそれをタップしたいときのためにただYESを設定してください。

BOOL i_am_ready_to_submit = NO;

-(void)action_finished{

[self.activityIndicator stopAnimating];

i_am_ready_to_submit = YES;

}

-(IBAction)submit_button{

if(i_am_ready_to_submit){

[self submit];

}

}
于 2011-04-05T12:01:48.247 に答える
4

ビューでタッチイベントを無効にするには、

[[UIApplication sharedApplication] beginIgnoringInteractionEvents];

ビューでタッチイベントを有効にするには

[[UIApplication sharedApplication] endIgnoringInteractionEvents];
于 2013-08-30T10:16:12.647 に答える
3

追加するだけ

[self.view setUserInteractionEnabled:NO];  

の前に

[self.activityIndicator startAnimating];  

後で再度有効にします

[self.activityIndicator stopAnimating];
[self.view setUserInteractionEnabled:YES]; 
于 2012-11-06T13:44:34.827 に答える
1

表示されているかどうかに基づいて、UIButtonを無効/有効にすることができますUIActivityIndicatorView。または、スピナーが表示されているときに「ユーザーインタラクションを破棄」したい場合は、ボタンハンドラーメソッドで次のようにします。

- (void)buttonTapped:(id)sender {
    if ([spinner superview] != nil && [spinner isAnimating]) {
        return;
    }
    // ... the rest of your code
}

UIActivityIndicatorViewこの例では、非表示にするときに次のいずれかを呼び出すことを前提としています。

[spinner removeFromSuperview];

また

[spinner stopAnimating];
于 2011-04-05T13:43:15.387 に答える
1

SVProgressHUD WrapperClassを使用する
ソースコードのActivityIndi​​catorを表示するためのオプションがたくさんありますここをクリックしてください!

[SVProgressHUD showWithMaskType:SVProgressHUDMaskTypeBlack];


上記のステートメントを使用して、バックグラウンドタッチを無効にします

[SVProgressHUDの却下]

バックグラウンドタッチを有効にします。

于 2014-02-28T07:37:45.130 に答える
1
@IBAction func yourButtonPressed(sender: UIButton) {
if self.activityIndicator.isAnimating() {
//remember the action user asked of you using the sender
} else {
//do your stuff
return
}
yourButtonPressed(yourButton)
}

または、self.activityIndi​​cator.animationDidStopを使用してコードを作成し、コンテンツを実行するタイミングを決定します

于 2016-07-24T20:54:20.790 に答える
1

swift 5の場合、次を使用できます。

self.view.isUserInteractionEnabled = false

そして、すべてを再度有効にするには:

self.view.isUserInteractionEnabled = true

数秒間フリーズするなど、ラグの問題がある場合は、次のように入力してください。

DispatchQueue.main.async {}

于 2021-04-19T12:28:29.387 に答える
0

簡単な解決策:画面全体をカバーする透明または疑似透明のビューを追加します。このビューの上にアクティビティインジケーターを追加します。待機期間が終了したら、両方のビューを削除します。インスピレーションを得る

すべての状況で画面全体を非表示にすることはできないため、より良い解決策は、アプリの状態を管理し(アプリが「ビジー」のときのアクションを無視する)、各アプリに応じて適切なボタンやその他のコントロールを無効/有効にすることです。州。

于 2011-04-05T12:04:58.620 に答える
0

以前の応答で回答が返されましたが、情報目的で「[self.activityIndi​​catorViewsetHidden:YES];」を追加するのと同じです。startAnimating / stopAnimatingがすでにこれを処理しているため、このメソッドを明示的に呼び出す必要はありません。「hidesWhenStopped」プロパティのデフォルト値を使用していると想定しています。

于 2015-10-07T10:41:22.500 に答える