@@ -9,6 +9,7 @@ struct CustomTextField: NSViewRepresentable {
99 var onSubmit : ( ) -> Void
1010 var onDownArrow : ( ) -> Void
1111 var onUpArrow : ( ) -> Void
12+ var onCancel : ( ) -> Void
1213
1314 func makeNSView( context: Context ) -> NSTextField {
1415 let textField = KeyHandlingTextField ( )
@@ -28,6 +29,7 @@ struct CustomTextField: NSViewRepresentable {
2829 textField. onDownArrow = onDownArrow
2930 textField. onUpArrow = onUpArrow
3031 textField. onSubmit = onSubmit
32+ textField. onCancel = onCancel
3133
3234 return textField
3335 }
@@ -40,6 +42,7 @@ struct CustomTextField: NSViewRepresentable {
4042 keyTextField. onDownArrow = onDownArrow
4143 keyTextField. onUpArrow = onUpArrow
4244 keyTextField. onSubmit = onSubmit
45+ keyTextField. onCancel = onCancel
4346 }
4447
4548 // Handle focus changes
@@ -65,6 +68,14 @@ struct CustomTextField: NSViewRepresentable {
6568 parent. onSubmit ( )
6669 }
6770
71+ func control( _ control: NSControl , textView: NSTextView , doCommandBy commandSelector: Selector ) -> Bool {
72+ if commandSelector == #selector( NSResponder . cancelOperation ( _: ) ) {
73+ parent. onCancel ( )
74+ return true
75+ }
76+ return false
77+ }
78+
6879 func controlTextDidChange( _ obj: Notification ) {
6980 if let textField = obj. object as? NSTextField {
7081 parent. text = textField. stringValue
@@ -85,6 +96,7 @@ private final class KeyHandlingTextField: NSTextField {
8596 var onDownArrow : ( ( ) -> Void ) ?
8697 var onUpArrow : ( ( ) -> Void ) ?
8798 var onSubmit : ( ( ) -> Void ) ?
99+ var onCancel : ( ( ) -> Void ) ?
88100
89101 override func awakeFromNib( ) {
90102 super. awakeFromNib ( )
@@ -121,6 +133,9 @@ private final class KeyHandlingTextField: NSTextField {
121133 case 36 : // Return key
122134 onSubmit ? ( )
123135 return
136+ case 53 : // Escape key
137+ onCancel ? ( )
138+ return
124139 default :
125140 super. keyDown ( with: event)
126141 }
0 commit comments