6

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

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

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

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

问题

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

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

什么可以解决这个问题?

4

8 回答 8

1

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

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

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

于 2011-01-13T12:35:41.880 回答
1

您的问题还不够继续,但要开始调试,我会执行以下操作。

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

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

  3. 您可能还想尝试在 IB 中默认启用它,直到您弄清楚一切。

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

于 2010-12-11T07:33:03.203 回答
0

First of all, make sure you have @synthesize activity at the top of your .m file. Then in the viewDidLoad method, type activity.hidesWhenStopped = TRUE;. Next, in the method that is called when the search starts, type [activity startAnimating]; and [activity stopAnimating]; in the method when the searching stops.

于 2010-12-11T18:26:47.650 回答
0

我建议您DSActivityView用于显示您的活动指示器。源代码可以在Dejal 博客上找到。

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

[DSActivityView activityViewForView:self.view];

于 2011-01-31T03:14:48.290 回答
0

开始为活动指示器设置动画,延迟 0.1 或 0.2 只需调用您想要的其他方法....我试过了,它对我有用....

于 2011-02-02T10:27:40.727 回答
0

尝试这个:

set 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];
}
于 2010-12-18T19:44:01.263 回答
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];
于 2011-01-30T09:13:07.700 回答
0

我得到了解决方案,如下所示。

我刚刚在搜索按钮单击事件中编写了以下行。

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

并定义函数threadStartAnimating:如下:

-(void)threadStartAnimating:(id)data
{
   [activityIndicator setHidden:NO];
   [activityIndicator startAnimating]; 
}
于 2011-02-03T12:17:24.530 回答