iOS Swift:如何在计算密集型代码之前解除键盘问题?

时间:2017-10-26 01:44:53

标签: ios swift xcode9

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

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

计算是CPU密集型的,根据输入需要几秒或更长时间才能完成。

如果我在代码运行之前尝试解除键盘,它就不会被解雇 - 代码运行在第1位。 (以下示例代码)

键盘解雇是否需要此代码的后台线程?

@IBOutlet weak var numberField: UITextField!

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

1 个答案:

答案 0 :(得分:2)

我认为你有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>
   }
}