Так что может возникнуть такой вопрос, но я не смог найти подобный.Подождите, пока пользователь не ответит на экранное представление, а затем выполнит код
В основном, что я пытаюсь сделать, пользователь будет получать приглашение с другого устройства. Затем появится представление, которое будет отображаться поверх текущего представления, чтобы пользователь принял или отклонил приглашение.
Если пользователь принимает приглашение, мне нужно выполнить какое-либо действие, однако я не могу заставить поток ждать, пока пользователь не ответит, и я не уверен в лучшем действии.
Я читал в GCD, чтобы узнать, смогу ли я найти решение оттуда, но я никогда не использовал GCD раньше, и я не смог понять это.
Вот мой код, который находится в пределах метода:
DispatchQueue.global().async(execute: {
DispatchQueue.main.sync {
print("\(#file) > \(#function) > In new thread: \(Thread.current)")
let popOverView = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "IncomingCall") as! IncomingCallViewController
self.addChildViewController(popOverView)
popOverView.peerIndex = self.getIndexForPeer(peer: fromPeer)
popOverView.messages = self.messages
popOverView.view.frame = self.view.frame
self.view.addSubview(popOverView.view)
popOverView.didMove(toParentViewController: self)
print("\(#file) > \(#function) > Finished synchronized code on thread: \(Thread.current)")
}
print("\(#file) > \(#function) > \(Thread.current))")
// Need to execute some code HERE when the user responds
})
То, что я надеялся, что поток, который запускает код в: DispatchQueue.main.sync будет продолжать работать, когда новый поповер переехал родитель. Но это не так, и как только popOverView будет нажат на экран, тогда будет завершен окончательный оператор печати.
Кто-нибудь знает, как лучше всего действовать здесь?
Спасибо.
Вы не должны использовать GCD для этого вообще. То, что вы можете сделать, это вызвать закрытие PopOver, вызванное пользователем, нажимая UIButton на PopOver. В этом закрытии вы выполнили свое действие. – mattsson
@mattsson Хммм. Хорошо, мне придется искать закрытие, я никогда не использовал их раньше. Следует также отметить, что когда пользователь нажимает кнопку «Принять», PopOverView исчезает, а затем нам нужно выполнить segue для другого представления. Это что-то меняет? – Logan
Ну, вам не нужно использовать закрытие. Возможно, было бы разумнее просто установить целевой и селектор, т. Е. Метод, который будет срабатывать при нажатии UIButton ('addTarget: action: forControlEvents:'). Все в порядке, что представление исчезает, пока вы устанавливаете другое представление в качестве цели UIButton. – mattsson