テキストフィールドのデリゲートメソッド
macOS 10.15.7 / Xcode 11.3.1 / Swift 5.0
テキストフィールドの動作の制御は、UIアプリケーションの実装において重要なテクニックである。ここでは、代表的な3つのデリゲートメソッドを紹介する。
準備
テキストフィールドのデリゲートのプロトコル宣言は、NSTextFieldDelegateである。本例では、AppDelegateクラスがデリゲートを引き受けることにして話を進める。
controlTextDidEndEditing( _ : )
returnキーを押したとき、またはテキストフィールドからファーストレスポンダが外れたときに起動する。これはタブキーで次のコントロールに移る、またはマウスのクリックで別のコントロールに移るというような場合である。notification引数の objectプロパティは NSTextFieldオブジェクトである。
"abc"と入力した後に、returnキーを押す、またはファーストレスポンダから外れる。
controlTextDidChange( _ : )
入力テキストの変更により起動する。文字を一文字入力する、または削除するごとに毎回メソッドが起動する。notification引数の objectプロパティは、NSTextFieldオブジェクトである。
"abc"と入力すると、一文字入力ごとに、合計 3回メソッドが起動する。
control( _: textView: doCommandBy: )
制御キーが入力されたときに起動する。
引数の説明
-
control
NSTextFieldオブジェクトがセットされる。NSControl型になっているので、使用するときは型変換をする。
-
textView
テキストフィールドの NSTextViewオブジェクト。stringプロパティから入力テキストを取得できる。
-
doCommandBy
制御キーの種類が Selector型の値としてセットされる。
戻り値
デフォルトの動作を有効にするには false、無効にするには trueを返す。例えば、tabキーの押下は次のコントロールへの移動だが、falseを返すと移動は行われない。
"abc"と入力した後に、returnキーを押す。
制御キー(セレクター)の種類
動作確認できたセレクターを次に示す。
セレクターは NSStandardKeyBindingRespondingプロトコルに準拠したメソッド である。定義されているメソッドは多数あるが、テキストフィールドで捕捉できるのは一部のようである。
[ 応用 ] controlメソッドを使った処理
4個のテキストフィールドを 2行x2列に配置する。テキストフィールドにファーストレスポンダがあるとき、矢印キーの上下左右いずれかを押す。その方向に別のテキストフィールドがある場合、ファーストレスポンダーはそこに移り、ない場合は何もしない。
![[image5]](image5.png)
ソースコード