0

Проблема, которую я не могу пройти через это, что UIActivityIndicatorView на мой взгляд, не запускается анимация, когда я исполняюUIActivityIndicatorView startAnimating не работает в searchBarSearchButtonClicked

[UIActivityIndicatorView startAnimating]; 

В

searchBarSearchButtonClicked 

Это мой код:

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar 
{ 
    [searchBar resignFirstResponder]; 

    NSString *causeStr = nil; 

    if ([CLLocationManager locationServicesEnabled] == NO) 
    { 
     causeStr = @"device"; 
    } 
    else if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied) 
    { 
     causeStr = @"app"; 
    } 
    else 
    { 
     [_activityIndicatorView startAnimating]; 

     _searchPlacesResults = [[NSMutableArray alloc] init]; 

     NSString * searchQuery = [searchBar text]; 

     FTGooglePlacesAPINearbySearchRequest *request = [[FTGooglePlacesAPINearbySearchRequest alloc] initWithLocationCoordinate:locationManager.location.coordinate]; 
     request.rankBy = FTGooglePlacesAPIRequestParamRankByDistance; 
     request.keyword = searchQuery; 
     request.radius = 500; 
     [self startSearchingPlaces:request]; 
    } 

    if (causeStr != nil) 
    { 
     NSString *alertMessage = [NSString stringWithFormat:@"You currently have location services disabled for this %@. Please refer to \"Settings\" app to turn on Location Services.", causeStr]; 

     [[[UIAlertView alloc] initWithTitle:@"Location Services Disabled" 
            message:alertMessage 
            delegate:nil 
          cancelButtonTitle:@"OK" 
          otherButtonTitles:nil] show]; 
    } 
} 

Ничего не происходит, пока я не удаляю результаты поиска с tableView подключен к UISearchBar с помощью кнопки отмены.

Я попытался и проверить, что

[UIActivityIndicatorView startAnimating]; 

на самом деле работает, когда вызывается из других методов.

EDIT: Я также проверил, что мой UIActivityIndicatorView не равно нулю, на самом деле это то, что я получаю, когда я NSLog его:

<UIActivityIndicatorView: 0x16e91ed0; frame = (150 274; 20 20); hidden = YES; opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x16e91f90>> 
+0

Вы проверили блок еще, которые содержат код [UIActivityIndicatorView startAnimating]; выполняет? ваш NSLog показывает, что UIActivityIndicatorView скрыт (hidden = YES) ;? – russell

+0

Да, я просто проверил его и блок else выполнил. – rambodrahmani

+0

Показывает HIDDEN из-за _activityIndicatorView.hidesWhenStopped = YES; – rambodrahmani

ответ

1

вы используете трость SVProgresshood, известный класс для индикатора активности. Загрузить его можно с here

Копировать SVProgressHUD папки для вашего проекта.

#import "SVProgressHUD.h" 

на нужный ViewController.

Где вы начинаете анимировать индикатор активности записи:

[SVProgressHUD showWithStatus:@"Loading.."]; 

И где, чтобы остановить индикатор активности, написать:

[SVProgressHUD dismiss]; 

Вы можете настроить свой собственный статус вместо «Loading ..»

Надеюсь, что он работает.

+0

Если я не найду другого решения, я рассмотрю использование сторонней библиотеки, как вы предлагали. Благодарю. – rambodrahmani

+0

это наиболее широко используется library.shortcut способ обработки указателя активности.best удачи – Logic

0

Вы установили точку останова, чтобы узнать, вызывается ли инструкция else? Если да, то попробуйте следующее: установить startAnimating внутри основной очереди следующим образом:

dispatch_async(dispatch_get_main_queue(), ^{ 
    [_activityIndicatorView startAnimating]; 
}); 
+0

Я установил точку останова, и вызывается выражение else. Я попробовал alo вы код: я заменил '[_activityIndicatorView startAnimating];' с 'dispatch_async (dispatch_get_main_queue(),^{ [_activityIndicatorView startAnimating]; });', НО это не работает ... – rambodrahmani