【Swift4、Xcode9.2】UITextFieldのデリゲートメソッド7つ

UITextFieldのそれぞれのデリゲートメソッドがいくつもあって毎回迷うのでここにまとめる。

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)       
    }
}

 

UITextFieldのデリゲートメソッドは7つ。

  • テキストフィールがタップされ、入力可能になる直前
  • テキストフィールがタップされ、入力可能になったあと
  • キーボードが閉じる前
  • キーボードを閉じたあと
  • リターンキーが押されたとき
  • テキストがクリアされる直前
  • 編集中

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

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
	print(#function)
	print("テキストフィールがタップされ、入力可能になる直前")
	return true
}

返り値はBool型でtrueとすると入力可能に。falseとすると入力できないようになります。

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

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

単純にテキストが入力されたあと、テキストの値を取得したりする。 値の取得の仕方は、

textField.text

キーボードを閉じる前

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
}
Follow
SHARE