@@ -6,10 +6,12 @@ struct PinCodeTextField: NSViewRepresentable {
66
77 @Binding var code : String
88 let numberOfDigits : Int
9+ let complete : ( String ) -> Void
910
1011 func makeNSView( context: Context ) -> NSViewType {
1112 let view = PinCodeTextView ( numberOfDigits: numberOfDigits, itemSpacing: 10 )
12- view. codeDidChange = { c in code = c }
13+ view. codeDidChange = { c in code = c }
14+ view. codeDidComplete = { complete ( $0) }
1315 return view
1416 }
1517
@@ -29,8 +31,9 @@ struct PinCodeTextField_Previews: PreviewProvider {
2931 struct PreviewContainer : View {
3032 @State private var code = " 1234567890 "
3133 var body : some View {
32- PinCodeTextField ( code: $code, numberOfDigits: 11 )
33- . padding ( )
34+ PinCodeTextField ( code: $code, numberOfDigits: 11 ) {
35+ print ( " Input is complete \( $0) " )
36+ } . padding ( )
3437 }
3538 }
3639
@@ -52,10 +55,16 @@ class PinCodeTextView: NSControl, NSTextFieldDelegate {
5255 handler ( String ( code. compactMap { $0 } ) )
5356 }
5457 updateText ( )
58+
59+ if code. compactMap ( { $0 } ) . count == numberOfDigits,
60+ let handler = codeDidComplete {
61+ handler ( String ( code. compactMap { $0 } ) )
62+ }
5563 }
5664 }
5765 var codeDidChange : ( ( String ) -> Void ) ? = nil
58-
66+ var codeDidComplete : ( ( String ) -> Void ) ? = nil
67+
5968 private let numberOfDigits : Int
6069 private let stackView : NSStackView = . init( frame: . zero)
6170 private var characterViews : [ PinCodeCharacterTextField ] = [ ]
0 commit comments