活动指示器未显示

4

我有两个关于活动指示器的问题: 1. 活动指示器在UIViewController上没有显示出来

我在.xib文件中添加了一个活动指示器。在按下按钮时,它应该开始动画。当从服务器接收到响应后,在进入下一页之前它应该停止动画。 我是这样做的:

activityIndicator.hidden = NO;

[activityIndicator performSelector:@selector(startAnimating) withObject:nil afterDelay:0.1];

[self.view bringSubviewToFront:activityIndicator];

....rest of code here....

activityIndicator.hidden = YES;

[activityIndicator stopAnimating];
  1. UITableView上的活动指示器未显示

对于表视图,我做法相同但是在didselectrowatindexpath中...

对于表视图,我还尝试将活动指示器添加到单元格附属品,但仍未显示出来。

在两种情况下,活动指示器都没有显示出来。

请帮忙解决。

谢谢。


这段代码都在一个方法里吗?这里的上下文是什么? - Firoze Lafeer
3个回答

11

如果所有这些代码都在一个方法或响应一个事件中,那么在返回到事件循环之前,视图的任何更改都不会可见。你设置 activityIndicator.hidden 为NO,然后在UI甚至有机会刷新之前再次将其设置为YES。

你似乎还停止了动画,然后才开始它。

你需要做的是在此处使活动指示器可见并开始其动画。然后安排要执行的工作(启动异步网络连接、将一些工作放入队列中或者你需要完成的任何其他任务),并从该方法返回,以便UI可以刷新、指示器可以绘制并且动画实际上可以开始。

然后稍后在某个时间点,在工作完成,你可以隐藏指示器并停止动画。但是你不能在主线程的一个单一事件循环中完成所有这些操作。因为在执行此方法时不会发生任何绘图(假设这是在主线程上)。

我希望这有意义?


2
现在我将代码修改为这样:
activityIndicator.hidden = NO;

[activityIndicator startAnimating];

[self performSelector:@selector(saveClicked) withObject:nil afterDelay:0.1];    

[self.view bringSubviewToFront:activityIndicator];

它起作用了 :)


1

在tableView中,也许应该使用self.navigationController.view而不是self.view


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接