集成到搜索栏中的活动指示器不会显示在iPhone SDK中

问题描述 投票:6回答:8

在我的iPhone应用程序中,我想在搜索栏上添加活动指示器。

在搜索时,它应显示活动指示器。

我在XIB中添加了活动指示器并创建了它的插座。

我在搜索完成时将其隐藏,但不显示活动指示器。

问题

我发现搜索功能(比如A)(我为活动指示器设置动画)依次调用另一个函数(比如B),因此主线程用于执行函数B.但是对于动画的活动指示器我们需要主线。

所以我尝试使用performSelectorInBackGround:withObject方法调用函数B.现在,当我单击搜索时,会显示活动指示器,但功能B的功能不会执行。

什么可以解决这个问题?

iphone objective-c cocoa-touch ios4 uiactivityindicatorview
8个回答
1
投票

你的问题还不够,但是为了开始调试,我会做以下几点。

  1. 验证活动是否真正连接到您在IB中创建的UIActivityIndi​​cator。 (我会在setHidden:行上设置一个断点,并确保变量不为null。或者抛出一个NSAssert(活动,@“Whoops!actity为null”);在那里。)
  2. 如果确实设置了变量,我会开始检查它是​​否在视图层次结构中的正确位置。 (我尝试做一个[self.view addSubview:activity]并看到它出现。你可能不得不在其他地方替换它。)
  3. 您可能还想尝试在IB中默认启用它,直到您完成所有事情。

祝好运。希望这可以帮助。


1
投票

节省您自己创建自定义活动指示器的麻烦,并使用已经可用的标准活动指示器 - 在顶部栏中。此外,IMO用户倾向于期望在事情发生时旋转。

UIApplication* app = [UIApplication sharedApplication];
app.networkActivityIndicatorVisible = YES; 

显然,当您的活动结束时将其设置为NO。


0
投票

首先,确保在.m文件的顶部有@synthesize活动。然后在viewDidLoad方法中,键入activity.hidesWhenStopped = TRUE;。接下来,在搜索开始时调用的方法中,在搜索停止时在方法中键入[activity startAnimating];[activity stopAnimating];


0
投票

试试这个:

设置hidesWhenStopped = NO,以便始终显示,然后隐藏并手动显示。但是应该在IB中设置View以隐藏第一个。

- (void)startActivityView {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
    activity_view.hidden = NO;
    [pool drain];
}

- (void)stopActivityView {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
    activity_view.hidden = YES;
    [pool drain];
}

- (void)doSomething {
    [self performSelectorInBackground:@selector(startActivityView) withObject:nil];
    // do some time consuming work
    [self performSelectorInBackground:@selector(stopActivityView) withObject:nil];
}

0
投票

也许您的活动指标前面有一个视图?如果你总是把它带到前面怎么办....

loadView = [[UIActivityIndicatorView alloc] 
            initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
loadView.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
loadView.center = window.center;
loadView.opaque = NO;
[window addSubview: loadView];
[window bringSubviewToFront:loadView];
[loadView startAnimating];

0
投票

我建议您使用DSActivityView来显示您的活动指标。源代码可以在Dejal blog找到。

显示和隐藏活动视图是一行简单的代码。

[DSActivityView activityViewForView:self.view];


0
投票

开始动画活动指示器,延迟0.1或0.2只需调用你想要的另一种方法....我试过,它对我有用....


0
投票

我有解决方案,如下所示。

我刚刚在搜索按钮点击事件中写下了这一行。

[NSThread detachNewThreadSelector:@selector(threadStartAnimating:) toTarget:self withObject:nil];

并定义函数threadStartAnimating:如下:

-(void)threadStartAnimating:(id)data
{
   [activityIndicator setHidden:NO];
   [activityIndicator startAnimating]; 
}
© www.soinside.com 2019 - 2024. All rights reserved.