来自笔尖的iPhone加载视图只能运行一次

时间:2010-05-06 13:14:08

标签: iphone uiview subview

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

第一次运行正常,但第二次无效。

这就是我的所作所为:

我有一个用于微调器的viewController(spinnerViewController)和一个我在IB中创建的nib文件(spinner.xib)。

我在viewDidLoad-event中加载nib:

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

[spinnerView retain];

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

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

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

工作得很好......

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

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

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

[编辑]

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

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

2 个答案:

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

} 

答案 1 :(得分:0)

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

所以总之我相信你只需要一个UIView(UIViewController的view属性) 你为什么不尝试这样的事情:

... 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