【问题标题】:UIActivityIndicatorView startAnimating not working in searchBarSearchButtonClickedUIActivityIndi​​catorView startAnimating 在 searchBarSearchButtonClicked 中不起作用
【发布时间】:2014-11-23 19:40:59
【问题描述】:

我无法解决的问题是我的视图中的 UIActivityIndi​​catorView 在我执行时没有开始动画

[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];
    }
}

在我使用取消按钮从连接到 UISearchBar 的 tableView 中清除搜索结果之前,什么都不会发生。

我已经尝试并验证了

[UIActivityIndicatorView startAnimating];

从其他方法调用时确实有效。

编辑: 我还验证了我的 UIActivityIndi​​catorView 不为空,实际上这是我在 NSLog 时得到的:

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

【问题讨论】:

  • 你检查过包含代码 [UIActivityIndi​​catorView startAnimating]; 的 else 块吗?执行?您的 NSLog 显示 UIActivityIndi​​catorView 已隐藏(隐藏 = YES);?
  • 是的,我刚刚检查过了,else 块正在执行。
  • 由于 _activityIndi​​catorView.hidesWhenStopped = YES; 显示为 HIDDEN;

标签: ios objective-c uisearchbar uisearchdisplaycontroller uiactivityindicatorview


【解决方案1】:

您可以使用 SVProgresshood ,一个著名的活动指示器类。 从here下载

SVProgressHUD 文件夹复制到您的项目中。

#import "SVProgressHUD.h"

到你需要的 ViewController。

从哪里开始编写动画活动指示器:

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

以及在哪里停止活动指示器,写:

[SVProgressHUD dismiss];

您可以设置自己的状态,而不是“正在加载..”

希望它有效。

【讨论】:

  • 如果我没有找到任何其他解决方案,那么我会按照您的建议考虑使用第三方库。谢谢。
  • 这是使用最广泛的库。处理活动指示器的快捷方式。祝你好运
【解决方案2】:

你是否设置了断点来查看 else 语句是否被调用?如果是这样,请尝试以下操作:在主队列中设置 startAnimating,如下所示:

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

【讨论】:

  • 我设置了断点,并且正在调用 else 语句。我试过你的代码:我用dispatch_async(dispatch_get_main_queue(), ^{ [_activityIndicatorView startAnimating]; });替换了[_activityIndicatorView startAnimating];,但它不起作用......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多