@@ -34,6 +34,8 @@ import UIKit
34
34
@objc optional func tokenFieldDidEndEditing( _ tokenField: ICTokenField )
35
35
/// Tells the delegate that the token field will process the pressing of the return button.
36
36
@objc optional func tokenFieldWillReturn( _ tokenField: ICTokenField )
37
+ /// Asks the delegate if the text should become a token in the token field.
38
+ @objc optional func tokenField( _ tokenField: ICTokenField , shouldCompleteText text: String ) -> Bool
37
39
/// Tells the delegate that the text becomes a token in the token field.
38
40
@objc optional func tokenField( _ tokenField: ICTokenField , didCompleteText text: String )
39
41
/// Tells the delegate that the token at certain index is removed from the token field.
@@ -289,21 +291,25 @@ open class ICTokenField: UIView, UITextFieldDelegate, ICBackspaceTextFieldDelega
289
291
let text = ( input as NSString ) . replacingCharacters ( in: range, with: string)
290
292
291
293
for delimiter in delimiters {
292
- if text. hasSuffix ( delimiter) {
293
- let index = text. index ( text. endIndex, offsetBy: - delimiter. characters. count)
294
- let newToken = text. substring ( to: index)
295
- textField. text = nil
296
-
297
- if !newToken. isEmpty && newToken != delimiter {
298
- tokens. append ( ICToken ( text: newToken, normalAttributes: normalTokenAttributes, highlightedAttributes: highlightedTokenAttributes) )
299
- layoutTokenTextField ( )
300
- delegate? . tokenField ? ( self , didCompleteText: newToken)
301
- }
302
- togglePlaceholderIfNeeded ( )
294
+ guard text. hasSuffix ( delimiter) else {
295
+ continue
296
+ }
297
+
298
+ let index = text. index ( text. endIndex, offsetBy: - delimiter. characters. count)
299
+ let newToken = text. substring ( to: index)
303
300
304
- return false
301
+ if !newToken. isEmpty && newToken != delimiter && ( delegate? . tokenField ? ( self , shouldCompleteText: newToken) ?? true ) {
302
+ tokens. append ( ICToken ( text: newToken, normalAttributes: normalTokenAttributes, highlightedAttributes: highlightedTokenAttributes) )
303
+ layoutTokenTextField ( )
304
+ delegate? . tokenField ? ( self , didCompleteText: newToken)
305
305
}
306
+
307
+ textField. text = nil
308
+ togglePlaceholderIfNeeded ( )
309
+
310
+ return false
306
311
}
312
+
307
313
return true
308
314
}
309
315
@@ -436,6 +442,12 @@ open class ICTokenField: UIView, UITextFieldDelegate, ICBackspaceTextFieldDelega
436
442
guard let text = inputTextField. text, !text. isEmpty else {
437
443
return
438
444
}
445
+
446
+ let shouldCompleteText = delegate? . tokenField ? ( self , shouldCompleteText: text) ?? true
447
+ guard shouldCompleteText else {
448
+ return
449
+ }
450
+
439
451
inputTextField. text = nil
440
452
tokens. append ( ICToken ( text: text, normalAttributes: normalTokenAttributes, highlightedAttributes: highlightedTokenAttributes) )
441
453
layoutTokenTextField ( )
0 commit comments