如何立即从superView中删除视图?

时间:2016-06-13 17:47:00

标签: objective-c multithreading uiview

我有一个UITableView作为子视图的一部分。

didSelectRowAtIndexPath我想从subview中移除superview并处理文件。

我在didSelectRowAtIndexPath中做的第一件事是调用[myView removeFromSuperView];然后我处理我的文件。

问题是在文件处理完毕之前,视图不会从superView中删除。

有什么方法可以强制我的viewController重绘所有视图吗? 也许我可以以某种方式阻止,直到视图被删除?

谢谢!

2 个答案:

答案 0 :(得分:2)

UI更改作为runloop的一部分进行处理。听起来你正在主线程上同步处理文件。你不应该这样做。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) ^{
    [self processFile:file];
})

答案 1 :(得分:0)

只需在主队列中执行 only UI工作即可。在Swift 3中:

DispatchQueue.main.async {
  /* UI stuff */
}

但是全局队列中的处理文件:

DispatchQueue.global(qos: .default).async {
   self.processFile(file)
}