如何在 Swift 中透過按下回車鍵隱藏鍵盤?


在本文中,您將學習如何在編輯 UITextField 中的文字時隱藏鍵盤。在本例中,您將透過按下鍵盤上的回車按鈕來隱藏鍵盤。

在 Swift 語言中,UITextField 類為我們提供了一些委託方法。它們在不同的操作或事件上被呼叫。我們將實現其中一個委託方法來隱藏鍵盤。此外,您還將看到如何在需要時更改返回型別。

在本例中,我們將透過以下步驟隱藏 UITextField 中用於輸入電子郵件地址的鍵盤:

步驟 1 − 在此步驟中,我們將建立並自定義 UITextField 物件以輸入電子郵件地址。

步驟 2 − 在此步驟中,我們將使 UITextField 符合委託並實現 textFieldShouldReturn 方法以隱藏鍵盤。

示例

import UIKit
class TestController: UIViewController {
   private let emailTextField = UITextField()
   override func viewDidLoad() {
      super.viewDidLoad()
      initialSetup()
   }
   private func initialSetup() {
      // basic setup
      view.backgroundColor = .white
      navigationItem.title = "UITextField"
        
      // emailTextField customization
      emailTextField.keyboardType = .emailAddress
      emailTextField.layer.cornerRadius = 8
      emailTextField.backgroundColor = UIColor(white: 0, alpha: 0.1)
      emailTextField.placeholder = "Enter email address"
      emailTextField.textAlignment = .center
      emailTextField.autocorrectionType = .no
      emailTextField.autocapitalizationType = .none
      emailTextField.returnKeyType = .done
        
      // adding the constraints to emailTextField
      view.addSubview(emailTextField)
      emailTextField.translatesAutoresizingMaskIntoConstraints = false
      emailTextField.heightAnchor.constraint(equalToConstant: 50).isActive = true
      emailTextField.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 30).isActive = true
      emailTextField.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -30).isActive = true
      emailTextField.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 50).isActive = true
   }
}

輸出

執行上述程式碼後,將出現以下輸出螢幕,其中包含用於輸入電子郵件地址的輸入欄位:

按下回車按鈕時,沒有任何反應。我們希望在按下回車鍵時鍵盤消失。讓我們執行隱藏鍵盤的過程。

設定 UITextField 委託

要獲取點選回車按鈕的回撥,您必須設定委託屬性並實現所需的方法。

emailTextField.delegate = self

在 initialSetup() 方法的最後一行新增約束後,使用上述程式碼行。在這裡,您將 self 分配給 emailTextField 的 delegate 屬性,以便在同一個控制器中實現這些方法。

新增委託屬性後執行應用程式時,您將收到如下錯誤:

Add missing conformance to 'UITextFieldDelegate' to class 'TestController'

根據上述錯誤,TestController 中缺少所需的委託方法。讓我們像這樣實現委託方法:

extension TestController: UITextFieldDelegate {
   func textFieldShouldReturn(_ textField: UITextField) -> Bool {
      textField.resignFirstResponder()
   }
}

在本例中,當按下回車鍵時會呼叫 textFieldShouldReturn 委託方法。在文字欄位上呼叫 resignFirstResponder() 方法,這會導致鍵盤被關閉。

結論

總之,您可以使用 returnKeyType 屬性將按鈕的返回型別更改為 done 型別。現在,您可以將委託屬性分配給文字欄位並實現這些方法。您需要實現 textFieldShouldReturn 方法來關閉鍵盤。

您可以在委託方法中呼叫 resignFirstResponder() 方法來取消鍵盤的響應。此方法在成功關閉鍵盤後返回布林型別,即 true。設定委託屬性以呼叫委託方法是必要的。

更新於: 2023年2月28日

3K+ 瀏覽量

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告