Я пытаюсь отобразить занятый вид в процессе поиска, но, похоже, он никогда не отображается.
Чего я пытаюсь достичь
- Пользователь нажимает кнопку поиска после ввода текста в UISearchBar.
- Введенный текст делегирован для searchBarSearchButtonClicked.
- Показать «Занятый вид», который представляет собой UIView, содержащий UIActivityIndicatorView, чтобы указать, что поиск выполняется.
- Выполнить поиск, который связывается с веб-сайтом.
- По завершении поиска удалите «Просмотр занятости».
Что не так
Процесс поиска работает нормально, с помощью отладчика я вижу, что он нормально перемещается через функцию 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 - Не отображалось сообщение «Busy View»