【问题标题】:Swift 3 hide NSButton immediately after clickSwift 3点击后立即隐藏NSButton
【发布时间】:2017-02-01 07:08:09
【问题描述】:

如何让按钮在被点击后消失?

 @IBAction func onClick(_ sender: NSButton) {
        sender.isHidden = true;
        //...a lot of blocking instructions below this line

 }

上述方法在一定程度上是有效的,因为只有在处理完函数中的所有指令后,“发送者”/按钮才会被隐藏。我在函数中有一些阻塞 IO(套接字连接等),我希望按钮在这一切发生之前消失。

我尝试同时使用 outletssender

【问题讨论】:

  • 您是否尝试过在主队列上调度 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 帖子中的“队列类型”。

标签: swift cocoa


【解决方案1】:
 @IBAction func onClick(_ sender: NSButton) {
    sender.isHidden = true;
    DispatchQueue.main.async {
        //...a lot of blocking instructions below this line
    }
 }

【讨论】:

    【解决方案2】:

    我通过将“阻塞”代码段放在以下语句中(并立即以同步方式推送 .isHidden 设置)来达到预期的效果:

     DispatchQueue.main.async { /*code*/ }
    

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 2021-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-03
      • 2020-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多