2016-06-13 4 views
0

У меня есть UITableView как часть подсмотра.Как удалить представление из супервизора мгновенно?

didSelectRowAtIndexPath Я хочу удалить subview из superview и обрабатывать файлы.

Первое, что я делаю внутри didSelectRowAtIndexPath - это вызов [myView removeFromSuperView];, тогда я обрабатываю свой файл.

Проблема заключается в том, что вид не удаляется из superView, пока файл не будет обработан.

Есть ли способ, которым я могу заставить мой viewController перерисовать все виды? Может быть, я могу как-то заблокировать до тех пор, пока вид не будет удален?

Спасибо!

+0

Если вы находитесь в ситуации, когда вы не можете обработать файл от основного потока это заставит цикл выполнения в обновить UI [[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode beforeDate: [NSDate date]]; –

ответ

2

Изменения пользовательского интерфейса обрабатываются как часть runloop. Похоже, вы обрабатываете файл в основном потоке и синхронно. Вы тоже не должны этого делать.

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

Просто сделайте свой только работу пользовательского интерфейса в основной очереди. В Swift 3:

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

Но файл процесса в глобальной очереди:

DispatchQueue.global(qos: .default).async { 
    self.processFile(file) 
} 
Смежные вопросы