【发布时间】:2017-02-01 07:08:09
【问题描述】:
如何让按钮在被点击后消失?
@IBAction func onClick(_ sender: NSButton) {
sender.isHidden = true;
//...a lot of blocking instructions below this line
}
上述方法在一定程度上是有效的,因为只有在处理完函数中的所有指令后,“发送者”/按钮才会被隐藏。我在函数中有一些阻塞 IO(套接字连接等),我希望按钮在这一切发生之前消失。
我尝试同时使用 outlets 和 sender。
【问题讨论】:
-
您是否尝试过在主队列上调度 UI 更改?
dispatch_async(dispatch_get_main_queue()) { // UI changes }然后继续做你的 IO 阻塞... -
我所做的并且似乎工作的是在 DispatchQueue.main.async { } 语句中移动阻塞 IO 并将 sender.isHidden 留在外面。不过,我不确定这是不是最好的方法?
-
我的理解是,UI 更改应该在主队列上分派,以使人们不知道事情是在“实时”发生的。然后可以在单独的后台队列上执行 IO 进程,以避免 UI “冻结”。请参阅 Ray Wenderlich raywenderlich.com/60749/grand-central-dispatch-in-depth-part-1 的 GCD 帖子中的“队列类型”。