web-dev-qa-db-ja.com

アクティビティインジケータービューが表示されているときにユーザーの操作を許可しない

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

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

P.D .: this thread でコメントされているように、モーダルソリューションを使用しないことをお勧めします。

編集済み:

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

- (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];
}
21

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

[[UIApplication sharedApplication] beginIgnoringInteractionEvents];

[[UIApplication sharedApplication] endIgnoringInteractionEvents];
109
ppalancica

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

UIApplication.shared.beginIgnoringInteractionEvents()

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

UIApplication.shared.endIgnoringInteractionEvents()
5
[_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];

}

}
4
DavidM

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

[[UIApplication sharedApplication] beginIgnoringInteractionEvents];

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

[[UIApplication sharedApplication] endIgnoringInteractionEvents];
4
Raja Jimsen

追加するだけ

[self.view setUserInteractionEnabled:NO];  

の前に

[self.activityIndicator startAnimating];  

後にそれを再び有効にします

[self.activityIndicator stopAnimating];
[self.view setUserInteractionEnabled:YES]; 
3
Omar Freewan
@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を実行し、いつ実行するかを決定します

1

SVProgressHUD WrapperClassを使用してください
ソースコードの場合 ここをクリック!

[SVProgressHUD showWithMaskType:SVProgressHUDMaskTypeBlack];


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

[SVProgressHUDを閉じる]

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

表示されているUIActivityIndicatorViewに基づいて、UIButtonを無効/有効にすることができます。または、ボタンハンドラーメソッドで、スピナーが表示されているときに「ユーザー操作を破棄する」だけの場合:

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

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

[spinner removeFromSuperview];

または

[spinner stopAnimating];
1
octy

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

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

0
djromero

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

0
vipin bansal