因此,可能已经有这样的问题,但我无法找到类似的问题。等待用户回复屏幕视图,然后执行代码
我正在尝试做的事情很多,用户是否会收到来自其他设备的邀请。然后会出现一个视图,弹出当前视图,要求用户接受或拒绝邀请。
但是,如果用户接受邀请,我需要执行一个操作,但是我似乎无法让线程等待,直到用户响应,我不确定最佳操作过程。
我一直在阅读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上的一个闭包,该闭包由用户在PopOver上点击一个UIButton触发。在那个封闭中你会执行你的行动。 – mattsson
@mattsson嗯..好的,我必须查看关闭,我从来没有使用过它们。我还应该注意到,当用户单击接受按钮时,PopOverView消失,然后我们需要执行一个segue到另一个视图。这会改变什么吗? – Logan
那么,你不必使用闭包。设置一个目标和选择器,也就是一个方法,当点击UIButton时会触发('addTarget:action:forControlEvents:')。只要您将另一个视图设置为UIButton的目标,视图就会消失就没关系。 – mattsson