UITableView上方的UIView未显示--iOS
在iOS上的tableView上方显示视图时出现问题。我们的方法 要创建作为UIViewController子类的子视图的UIView,请发送 将其放在后面,然后在didSelectRowAtIndexPath上将其放在前面。 我们正在使用XIB来创建用户界面。视图层次结构类似于 这: 查看UITableView上方的UIView未显示--iOS,ios,cocoa-touch,Ios,Cocoa Touch,在iOS上的tableView上方显示视图时出现问题。我们的方法 要创建作为UIViewController子类的子视图的UIView,请发送 将其放在后面,然后在didSelectRowAtIndexPath上将其放在前面。 我们正在使用XIB来创建用户界面。视图层次结构类似于 这: 查看 --UIView(“加载…”视图) ----UILabel(“加载…”) ----UIActivityIndicatorView --UITableView --UILabel 下面是我们尝试显示“加载”视
--UIView(“加载…”视图)
----UILabel(“加载…”)
----UIActivityIndicatorView
--UITableView
--UILabel 下面是我们尝试显示“加载”视图的步骤: 每当我们将“加载”视图放在视图中所有其他视图的前面时 XIB,我们可以看到它看起来像我们想要的。然而,当我们离开装货区时 在后面查看(按照上面的视图层次),然后尝试将其带到 在前面,视图从不显示。打印出
self.view.subview
显示
加载视图实际上在视图层次结构中。有趣的是,如果我们尝试
在didSelectRowAtIndexPath中更改视图中的其他内容(例如,
更改已在视图中显示的标签的背景色),
该更改从未在模拟器上显示。问题在于同步请求。它会阻塞主线程,因此活动指示器没有机会显示 一个简单的解决方案是异步加载全局队列上的数据,当加载所有内容时,回调主队列
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Make the request
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&err];
dispatch_async(dispatch_get_main_queue(), ^{
// Stop animating the activity indicator.
[loadingWheel stopAnimating];
// other stuff...
});
});
虽然上述解决方案可行,但它会阻塞全局队列,因此并不理想。通过
NSURLConnection
查看异步加载。苹果的“URL加载系统编程指南”对此进行了详细解释。问题在于同步请求。它会阻塞主线程,因此活动指示器没有机会显示
一个简单的解决方案是异步加载全局队列上的数据,当加载所有内容时,回调主队列
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Make the request
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&err];
dispatch_async(dispatch_get_main_queue(), ^{
// Stop animating the activity indicator.
[loadingWheel stopAnimating];
// other stuff...
});
});
虽然上述解决方案可行,但它会阻塞全局队列,因此并不理想。通过
NSURLConnection
查看异步加载。苹果的“URL加载系统编程指南”对此进行了详细解释。我们现在完全删除了同步请求。虽然代码的最后一个注释中提到的“其他东西”涉及发布一个通知,该通知会导致一些异步请求,但我们的“加载”视图仍然没有出现。这对我来说很好。我只保留了将子视图带到前面并开始动画的两行,并将bringViewToFront:
更改为bringSubviewToFront:
(这是正确的方法名称)。检查所有内容是否都与XIB文件连接,即确保self.view、self.loadingView等连接到正确的对象。我们现在完全删除了同步请求。虽然代码的最后一个注释中提到的“其他东西”涉及发布一个通知,该通知会导致一些异步请求,但我们的“加载”视图仍然没有出现。这对我来说很好。我只保留了将子视图带到前面并开始动画的两行,并将bringViewToFront:
更改为bringSubviewToFront:
(这是正确的方法名称)。检查所有内容是否与XIB文件连接,即确保self.view、self.loadingView等连接到正确的对象。