@@ -8,7 +8,7 @@ import UIKit
88
99@objc
1010public protocol SwiftyCodeViewDelegate : class {
11- func codeView( sender: SwiftyCodeView , didFinishInput code: String )
11+ func codeView( sender: SwiftyCodeView , didFinishInput code: String ) -> Bool
1212}
1313
1414@IBDesignable
@@ -42,6 +42,9 @@ open class SwiftyCodeView: UIControl {
4242 let item = stackView. arrangedSubviews [ i] as! SwiftyCodeItemView
4343 item. textField. text = i < array. count ? array [ i] : " "
4444 }
45+ if !stackView. arrangedSubviews. compactMap ( { $0 as? UITextField } ) . filter ( { $0. isFirstResponder} ) . isEmpty {
46+ self . becomeFirstResponder ( )
47+ }
4548 }
4649 }
4750
@@ -81,12 +84,14 @@ open class SwiftyCodeView: UIControl {
8184 . last as! SwiftyCodeItemView
8285 }
8386
87+ @discardableResult
8488 override open func becomeFirstResponder( ) -> Bool {
8589 let items = stackView. arrangedSubviews
8690 . map ( { $0 as! SwiftyCodeItemView } )
8791 return ( items. filter ( { ( $0. textField. text ?? " " ) . isEmpty} ) . first ?? items. last) !. becomeFirstResponder ( )
8892 }
8993
94+ @discardableResult
9095 override open func resignFirstResponder( ) -> Bool {
9196 stackView. arrangedSubviews. forEach ( { $0. resignFirstResponder ( ) } )
9297 return true
@@ -112,8 +117,9 @@ extension SwiftyCodeView: UITextFieldDelegate, SwiftyCodeTextFieldDelegate {
112117 item. textField. text = string
113118 sendActions ( for: . valueChanged)
114119 if index == length - 1 { //is last textfield
115- delegate? . codeView ( sender: self , didFinishInput: self . code)
116- textField. resignFirstResponder ( )
120+ if ( delegate? . codeView ( sender: self , didFinishInput: self . code) ?? false ) {
121+ textField. resignFirstResponder ( )
122+ }
117123 return false
118124 }
119125
0 commit comments