1

我正在尝试向我的应用程序添加一个«loader-view»,它在做事时显示一个微调器。

这第一次工作正常,但第二次就不行了。

这就是我所做的:

我有一个微调器的视图控制器(spinnerViewController)和一个我在 IB 中制作的 nib 文件(spinner.xib)。

我在 viewDidLoad 事件中加载笔尖:

spinnerView = [[spinnerViewController alloc] initWithNibName:@"spinner" bundle:nil];

[spinnerView 保留];

spinnerView 在 .h 文件中声明 (spinnerViewController *spinnerView;)

接下来,我展示微调器视图:

[self.view addSubview:spinnerView.view];
 [self.view bringSubviewToFront:spinnerView.view];

效果很好...

现在麻烦开始了。无论我做什么,我都无法再次显示微调器视图。

我试着隐藏它(self.view sendSubViewToBack:spinnerView.view),它适用于隐藏,但是当我尝试再次将它带到前面时(self.view bringSubViewToFront:spinnerView.view)它不起作用。

我还尝试删除微调器视图并再次添加它但没有成功(在微调器视图控制器中:[self.view removeFromSuperview] 并再次显示它 [self.view addSubview...)

[编辑]

我稍微改变了整个设置,只是让微调器视图成为 IB 中的子视图 - 再次隐藏工作,但再次显示失败。我发现了什么:在bringSubViewToFront 命令之后,我调用了一些网络服务来获取一些数据。当我将以下代码注释掉并仅显示 spinnerView 时,它可以工作。所以现在我试图弄清楚如何确定微调视图何时出现,然后继续代码 - 但自然,这不起作用(还):)

任何想法我做错了什么???;)

4

2 回答 2

1

问题解决了。

这个页面给出了答案:http ://urenjoy.blogspot.com/2009/05/uiactivityindicatorview.html

显然,更新必须发生在一个单独的线程中,因为 web-stuff 阻止了当前的,因此视图没有出现。

[NSThread detachNewThreadSelector:@selector(doWork) toTarget:self withObject:nil];
- (void) doWork {

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

.....Time Consuming Code here .....

[pool release];

} 
于 2010-05-06T14:10:51.360 回答
0

我可能不完全在你的问题上,但一般来说,创建一个 ViewController 类以在屏幕上显示一个微调器是一个巨大的矫枉过正......只需尝试发现你所做的事情背后的逻辑:你创建了一个视图控制器,但是你永远不要使用它,您使用视图。

所以简而言之,我相信你只需要一个 UIView(UIViewController 的视图属性)你为什么不尝试类似的东西:

... in your class interface... 

UIActivityIndicator* activity;

... when the activity needs to happen ...

activity = [[UIActivityIndicator alloc] initWithActivityIndicatorStyle: .... 
[activity startAnimating];
[self.view addSubview:activity];
[activity release]

... when the activity is finished

[activity removeFromSuperview]; //this will also decrease the retain count
于 2010-05-06T14:15:57.837 回答