検索プロセス中にビジー ビューを表示しようとしていますが、表示されないようです。
私が達成しようとしていること
- ユーザーは、UISearchBar にテキストを入力した後、検索ボタンをクリックします。
- 入力されたテキストは、searchBarSearchButtonClicked に委譲されます。
- 検索が進行中であることを示す UIActivityIndicatorView を含む UIView である「ビジー ビュー」を表示します。
- Web サイトと通信する検索を実行します。
- 検索が完了したら、「Busy View」を削除します。
どうしたの
検索プロセスは正常に機能しています。デバッガーを使用すると、searchBarSearchButtonClicked 関数を正常に通過していることがわかりますが、「ビジー ビュー」は表示されません。検索には 2 ~ 3 秒かかるため、理論的には、その 2 ~ 3 秒間「ビジー ビュー」が表示されるはずです。
コード試行 1 -スーパービューから「ビジー ビュー」を追加および削除する**
- (void)searchBarSearchButtonClicked:(UISearchBar *)activeSearchBar {
[activeSearchBar setShowsCancelButton:NO animated:YES];
[activeSearchBar resignFirstResponder];
[busyView activateSpinner]; //start the spinner spinning
[self.view addSubview:busyView]; //show the BusyView
Search *search = [[Search alloc]init];
results = [search doSearch:activeSearchBar.text];
[busyView deactivateSpinner]; //Stop the spinner spinning
[busyView removeFromSuperview]; //remove the BusyView
[search release]; search = nil;
}
試行の結果 1 -表示されませんが、removeFromSuperview 呼び出しをコメントアウトすると、ビジー ビューが画面に残ります。
コード試行 2 -アニメーションの使用
- (void)searchBarSearchButtonClicked:(UISearchBar *)activeSearchBar {
[activeSearchBar setShowsCancelButton:NO animated:YES];
[activeSearchBar resignFirstResponder];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop)];
[busyView activateSpinner]; //start spinning the spinner
[self.view addSubview:busyView]; //show the busy view
[UIView commitAnimations];
Search *search = [[Search alloc]init];
results = [search doSearch:activeSearchBar.text];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop)];
[busyView deactivateSpinner]; //sets stops the spinner spinning
[busyView removeFromSuperview]; //remove the view
[UIView commitAnimations];
[search release]; search = nil;
}
試行 2 の結果 -「ビジー ビュー」が表示されませんでした