草庐IT

iOS swift : How to dismiss keyboard before compute-intensive code?

coder 2023-09-15 原文

我有一个带有文本字段的 View ,用户将使用数字键盘输入一个整数。

然后用户点击按钮进行计算。

计算是 CPU 密集型的,需要几秒或更长时间才能完成,具体取决于输入。

如果我尝试在代码运行之前关闭键盘,它不会被关闭——代码首先运行。 (下面的示例代码)

此代码的后台线程是否需要键盘关闭才能正常工作?

@IBOutlet weak var numberField: UITextField!

@IBAction func runCPUIntensiveCode(_ sender: UIButton) {
    numberField.resignFirstResponder()
    runCode()
}

最佳答案

我认为您有两个解决方案 DispatchQueue :
1. [我推荐这个] 通过 global background queues 之一将您的计算移至后台:

@IBAction func runCPUIntensiveCode(_ sender: UIButton) {
    numberField.resignFirstResponder()
    DispatchQueue.global(.userInitiated).async{

      runCode()
    DispatchQueue.main.async{
      <notify UI about completion>
   }
}

2。以较小的延迟开始计算。有时动画子系统需要空闲的主线程来调度动画:

@IBAction func runCPUIntensiveCode(_ sender: UIButton) {
    numberField.resignFirstResponder()
    DispatchQueue.main. asyncAfter(DispatchWallTime.distantFuture){
      runCode()
      <notify UI about completion>
   }
}

关于iOS swift : How to dismiss keyboard before compute-intensive code?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46944578/

有关iOS swift : How to dismiss keyboard before compute-intensive code?的更多相关文章

随机推荐