Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
UITableView上方的UIView未显示--iOS_Ios_Cocoa Touch - Fatal编程技术网

UITableView上方的UIView未显示--iOS

UITableView上方的UIView未显示--iOS,ios,cocoa-touch,Ios,Cocoa Touch,在iOS上的tableView上方显示视图时出现问题。我们的方法 要创建作为UIViewController子类的子视图的UIView,请发送 将其放在后面,然后在didSelectRowAtIndexPath上将其放在前面。 我们正在使用XIB来创建用户界面。视图层次结构类似于 这: 查看 --UIView(“加载…”视图) ----UILabel(“加载…”) ----UIActivityIndicatorView --UITableView --UILabel 下面是我们尝试显示“加载”视

在iOS上的tableView上方显示视图时出现问题。我们的方法 要创建作为UIViewController子类的子视图的UIView,请发送 将其放在后面,然后在didSelectRowAtIndexPath上将其放在前面。 我们正在使用XIB来创建用户界面。视图层次结构类似于 这:

查看
--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等连接到正确的对象。