NSTextField デリゲート

macOS Swift

テキストフィールドのデリゲートメソッド

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

制御キーが入力されたときに起動する。
引数の説明
戻り値
デフォルトの動作を有効にするには false、無効にするには trueを返す。例えば、tabキーの押下は次のコントロールへの移動だが、falseを返すと移動は行われない。
"abc"と入力した後に、returnキーを押す。

制御キー(セレクター)の種類

動作確認できたセレクターを次に示す。
セレクターは NSStandardKeyBindingRespondingプロトコルに準拠したメソッド である。定義されているメソッドは多数あるが、テキストフィールドで捕捉できるのは一部のようである。

[ 応用 ] controlメソッドを使った処理

4個のテキストフィールドを 2行x2列に配置する。テキストフィールドにファーストレスポンダがあるとき、矢印キーの上下左右いずれかを押す。その方向に別のテキストフィールドがある場合、ファーストレスポンダーはそこに移り、ない場合は何もしない。
[image5]
ソースコード