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

时间:2010-12-11 06:31:23

标签: iphone objective-c cocoa-touch ios4 uiactivityindicatorview

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

搜索时应显示活动指示。

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

我在搜索结束时隐藏,但活动指示器不显示。

问题

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

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

为此可以解决什么问题?

8 个答案:

答案 0 :(得分:1)

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

  1. 验证活动是否真正连接到您在IB中创建的UIActivityIndi​​cator。 (我会在setHidden:行上设置一个断点,并确保变量不为null。或者抛出一个NSAssert(活动,@“Whoops!actity为null”);在那里。)

  2. 如果确实设置了变量,我会开始检查它是​​否在视图层次结构中的正确位置。 (我会尝试[self.view addSubview:activity]并看到它出现。你可能不得不在其他地方替换它。)

  3. 您可能还想尝试在IB中默认启用它,直到您完成所有事情。

  4. 祝你好运。希望这会有所帮助。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

试试这个:

设置hidesWhenStopped = NO,以便始终显示,然后隐藏并手动显示。但是应该在IB中将视图设置为首先隐藏。

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

答案 4 :(得分: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];

答案 5 :(得分:0)

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

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

[DSActivityView activityViewForView:self.view];

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

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

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

并将函数threadStartAnimating:定义如下:

-(void)threadStartAnimating:(id)data
{
   [activityIndicator setHidden:NO];
   [activityIndicator startAnimating]; 
}