等到用户响应屏幕视图,然后执行代码

Wait until user responds to onscreen view and then execute code

所以可能已经有这样的问题,但我找不到类似的问题。

我想做的差不多就是用户将从另一台设备收到一些邀请。然后将在当前视图上弹出一个视图,要求用户接受或拒绝邀请。

如果用户接受邀请,我需要执行操作,但是,我似乎无法让线程等待用户响应,而且我不确定最佳操作过程。

我一直在阅读 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 将在新的 popOver 移动到父级时继续 运行。但事实并非如此,一旦 popOverView 被推到屏幕上,那么最终的打印语句 运行s。

有谁知道最好的行动方案吗?

谢谢。

使用线程并且不"wait"。从来没有从来没有 "wait"。 iOS编程是event-driven。您的工作是组织您的代码以响应适当/所需的事件。

If the user accepts the invitation I need to perform an action

然后通过执行该操作来响应用户点击接受按钮。就这么简单。

毕竟,这就是 UIAlertController 的视图的行为方式。没有代码暂停或 "waits" 只是因为警报已启动。您的代码 响应 用户事件,即用户点击警报中的按钮。