我尝试做什么:如果用户按下按钮,则会加载一个新的视图控制器并将其推送到导航控制器。
新的视图控制器正在它的 ViedDidLoad 方法中进行一些硬数据库查询,这会导致加载视图需要几秒钟。
我试图在视图开始加载之前显示等待指示器。
如果我尝试在分配新视图之前添加一个 UIActivityIndicatorView 作为我的起始视图的子视图,则在新视图完成加载后显示指示器...
我还尝试将数据库查询放在 ViewDidAppear 方法中,但结果相同。
看看MBProgressHUD。这真的很容易实现。
主要问题是所有 UI 更改都必须在主线程上完成,因此所有需要相对较长时间的任务都必须在后台线程上完成。
MBProgressHUD 将为您执行此操作。如果要自定义它,只需更改代码即可。
问题是所有 UI 更改都必须在应用程序主线程上执行。如果某些东西阻塞了主线程,则不会应用 UI 更改(UIActivityIndicatorView
在您的情况下未显示)。
要解决您的问题,您必须在后台线程(例如使用-performSelectorInBackground:withObject
方法)中运行加载数据例程,将主线程留给 UI。