miyazaki-dev

【Swift】UITextFieldのデリゲートメソッド7つ

Swift

UITextFieldの設置

class ViewController: UIViewController,UITextFieldDelegate {

  var testTextField:UITextField!

  override func viewDidLoad() {
    super.viewDidLoad()    
  
    self.testTextField = UITextField()
    self.testTextField.frame = CGRect(x: 100, y: 100, width: 200, height: 30)
    self.testTextField.borderStyle = UITextBorderStyle.roundedRect
    self.testTextField.text = ""
    self.testTextField.delegate = self
    self.view.addSubview(self.testTextField)       
  }
}
  • テキストフィールがタップされ、入力可能になる直前
  • テキストフィールがタップされ、入力可能になったあと
  • キーボードが閉じる前
  • キーボードを閉じたあと
  • リターンキーが押されたとき
  • テキストがクリアされる直前
  • 編集中

テキストフィールがタップされ、入力可能になる直前

  func textFieldDidBeginEditing(_ textField: UITextField) {
	print(#function)
	// 入力されたキーワードをプリント
	print(textField.text)
	print("テキストフィールがタップされ、入力可能になったあと")
  }

テキストフィールがタップされ、入力可能になったあと

  func textFieldDidBeginEditing(_ textField: UITextField) {
    print(#function)
    print("テキストフィールがタップされ、入力可能になったあと")
  }

キーボードを閉じる前

  func textFieldShouldEndEditing(_ textField:UITextField) -> Bool {
	print(#function)
	print("キーボードを閉じる前")
	return true
  }

ここの返り値はBool型なので、falseとするとキーボードが閉じなくなります。

キーボードを閉じたあと

  func textFieldDidEndEditing(_ textField:UITextField){
    print(#function)
    print("キーボードを閉じたあと")
  }

リターンキーが押されたとき

  func textFieldShouldReturn(_ textField:UITextField) -> Bool {
    print("キーボードを閉じる前")
    // キーボードを閉じる処理
    self.view.endEditing(true)
    print("キーボードを閉じたあと")
    return true
  }

テキストがクリアされる直前

  func textFieldShouldClear(_ textField: UITextField) -> Bool {
    return true
  }

編集中に毎回呼び出される

  func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    print("変更中")
    return true
  }