From 619085e4cf6308c001a15e59c31dcc825078e742 Mon Sep 17 00:00:00 2001 From: Benigno Date: Wed, 11 Mar 2020 08:57:52 +0800 Subject: [PATCH 01/17] Set the color of the text in the text field --- KSTokenView/KSTokenField.swift | 1 + KSTokenView/KSTokenView.swift | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/KSTokenView/KSTokenField.swift b/KSTokenView/KSTokenField.swift index a71954b..d7761e2 100644 --- a/KSTokenView/KSTokenField.swift +++ b/KSTokenView/KSTokenField.swift @@ -121,6 +121,7 @@ open class KSTokenField: UITextField { _descriptionText = tokenView!.descriptionText placeHolderColor = tokenView!.placeholderColor promptTextColor = tokenView!.promptColor + textColor = tokenView!.textColor _setPromptText(tokenView!.promptText) if (_setupCompleted) { diff --git a/KSTokenView/KSTokenView.swift b/KSTokenView/KSTokenView.swift index 0a1a65b..b6a3ee0 100644 --- a/KSTokenView/KSTokenView.swift +++ b/KSTokenView/KSTokenView.swift @@ -341,6 +341,13 @@ open class KSTokenView: UIView { _updateTokenField() } } + + /// default is UIColor.blackColor() + @objc open var textColor: UIColor = UIColor.black { + didSet { + _updateTokenField() + } + } /// default is .Rounded, creates rounded corner @objc open var style: KSTokenViewStyle = .rounded { From 0130b3f0620bc54da959d92e618e79dd860cc39d Mon Sep 17 00:00:00 2001 From: Aditya Ghosh Date: Sat, 28 Mar 2020 13:22:20 +0530 Subject: [PATCH 02/17] Extend tableview to keyboard top. TODO : Keyboard height calculation --- KSTokenView/KSTokenField.swift | 2 +- KSTokenView/KSTokenView.swift | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/KSTokenView/KSTokenField.swift b/KSTokenView/KSTokenField.swift index a71954b..7857aae 100644 --- a/KSTokenView/KSTokenField.swift +++ b/KSTokenView/KSTokenField.swift @@ -252,7 +252,7 @@ open class KSTokenField: UITextField { fileprivate func _insertToken(_ token: KSToken, shouldLayout: Bool = true) { _scrollView.addSubview(token) - _scrollView.bringSubviewToFront(token) + _scrollView.bringSubview(toFront: token) token.setNeedsDisplay() if shouldLayout == true { updateLayout() diff --git a/KSTokenView/KSTokenView.swift b/KSTokenView/KSTokenView.swift index 0a1a65b..8964069 100644 --- a/KSTokenView/KSTokenView.swift +++ b/KSTokenView/KSTokenView.swift @@ -95,14 +95,14 @@ open class KSTokenView: UIView { //MARK: - Private Properties //__________________________________________________________________________________ // - fileprivate var _tokenField: KSTokenField! + @objc open var _tokenField: KSTokenField! fileprivate var _searchTableView: UITableView = UITableView(frame: .zero, style: UITableView.Style.plain) fileprivate var _resultArray = [AnyObject]() fileprivate var _showingSearchResult = false - fileprivate var _indicator = UIActivityIndicatorView(style: UIActivityIndicatorView.Style.gray) + fileprivate var _indicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorView.Style.gray) fileprivate var _searchResultHeight: CGFloat = 200.0 fileprivate var _lastSearchString: String = "" - fileprivate var _intrinsicContentHeight: CGFloat = UIView.noIntrinsicMetric + fileprivate var _intrinsicContentHeight: CGFloat = UIViewNoIntrinsicMetric //MARK: - Public Properties //__________________________________________________________________________________ @@ -419,7 +419,7 @@ open class KSTokenView: UIView { } override open var intrinsicContentSize : CGSize { - return CGSize(width: UIView.noIntrinsicMetric, height: _intrinsicContentHeight) + return CGSize(width: UIViewNoIntrinsicMetric, height: _intrinsicContentHeight) } //MARK: - Public Methods From bcf6f0feb0f092994debe79fe6012c94e724df18 Mon Sep 17 00:00:00 2001 From: Ajay Mann Date: Fri, 24 Sep 2021 13:36:32 +0530 Subject: [PATCH 03/17] Revert "Extend tableview to keyboard top. TODO : Keyboard height calculation" This reverts commit 0130b3f0620bc54da959d92e618e79dd860cc39d. --- KSTokenView/KSTokenField.swift | 2 +- KSTokenView/KSTokenView.swift | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/KSTokenView/KSTokenField.swift b/KSTokenView/KSTokenField.swift index d796e62..d7761e2 100644 --- a/KSTokenView/KSTokenField.swift +++ b/KSTokenView/KSTokenField.swift @@ -253,7 +253,7 @@ open class KSTokenField: UITextField { fileprivate func _insertToken(_ token: KSToken, shouldLayout: Bool = true) { _scrollView.addSubview(token) - _scrollView.bringSubview(toFront: token) + _scrollView.bringSubviewToFront(token) token.setNeedsDisplay() if shouldLayout == true { updateLayout() diff --git a/KSTokenView/KSTokenView.swift b/KSTokenView/KSTokenView.swift index a6f53b2..b6a3ee0 100644 --- a/KSTokenView/KSTokenView.swift +++ b/KSTokenView/KSTokenView.swift @@ -95,14 +95,14 @@ open class KSTokenView: UIView { //MARK: - Private Properties //__________________________________________________________________________________ // - @objc open var _tokenField: KSTokenField! + fileprivate var _tokenField: KSTokenField! fileprivate var _searchTableView: UITableView = UITableView(frame: .zero, style: UITableView.Style.plain) fileprivate var _resultArray = [AnyObject]() fileprivate var _showingSearchResult = false - fileprivate var _indicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorView.Style.gray) + fileprivate var _indicator = UIActivityIndicatorView(style: UIActivityIndicatorView.Style.gray) fileprivate var _searchResultHeight: CGFloat = 200.0 fileprivate var _lastSearchString: String = "" - fileprivate var _intrinsicContentHeight: CGFloat = UIViewNoIntrinsicMetric + fileprivate var _intrinsicContentHeight: CGFloat = UIView.noIntrinsicMetric //MARK: - Public Properties //__________________________________________________________________________________ @@ -426,7 +426,7 @@ open class KSTokenView: UIView { } override open var intrinsicContentSize : CGSize { - return CGSize(width: UIViewNoIntrinsicMetric, height: _intrinsicContentHeight) + return CGSize(width: UIView.noIntrinsicMetric, height: _intrinsicContentHeight) } //MARK: - Public Methods From 2d5ddf39c8675508b5601b20660a5e736311e901 Mon Sep 17 00:00:00 2001 From: Ajay Mann Date: Fri, 24 Sep 2021 14:25:03 +0530 Subject: [PATCH 04/17] Fix swift errors --- KSTokenView/KSTokenField.swift | 2 +- KSTokenView/KSTokenView.swift | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/KSTokenView/KSTokenField.swift b/KSTokenView/KSTokenField.swift index d7761e2..77b78d5 100644 --- a/KSTokenView/KSTokenField.swift +++ b/KSTokenView/KSTokenField.swift @@ -253,7 +253,7 @@ open class KSTokenField: UITextField { fileprivate func _insertToken(_ token: KSToken, shouldLayout: Bool = true) { _scrollView.addSubview(token) - _scrollView.bringSubviewToFront(token) + _scrollView.bringSubview(toFront: token) token.setNeedsDisplay() if shouldLayout == true { updateLayout() diff --git a/KSTokenView/KSTokenView.swift b/KSTokenView/KSTokenView.swift index b6a3ee0..cf37f81 100644 --- a/KSTokenView/KSTokenView.swift +++ b/KSTokenView/KSTokenView.swift @@ -99,10 +99,10 @@ open class KSTokenView: UIView { fileprivate var _searchTableView: UITableView = UITableView(frame: .zero, style: UITableView.Style.plain) fileprivate var _resultArray = [AnyObject]() fileprivate var _showingSearchResult = false - fileprivate var _indicator = UIActivityIndicatorView(style: UIActivityIndicatorView.Style.gray) + fileprivate var _indicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorView.Style.gray) fileprivate var _searchResultHeight: CGFloat = 200.0 fileprivate var _lastSearchString: String = "" - fileprivate var _intrinsicContentHeight: CGFloat = UIView.noIntrinsicMetric + fileprivate var _intrinsicContentHeight: CGFloat = UIViewNoIntrinsicMetric //MARK: - Public Properties //__________________________________________________________________________________ @@ -426,7 +426,7 @@ open class KSTokenView: UIView { } override open var intrinsicContentSize : CGSize { - return CGSize(width: UIView.noIntrinsicMetric, height: _intrinsicContentHeight) + return CGSize(width: UIViewNoIntrinsicMetric, height: _intrinsicContentHeight) } //MARK: - Public Methods From 9a108e072ebc56c7934761a294704ba5a5b08413 Mon Sep 17 00:00:00 2001 From: Ajay Mann Date: Wed, 15 Dec 2021 13:30:16 +0530 Subject: [PATCH 05/17] Set indentation to 3 space --- KSTokenView/KSTokenView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/KSTokenView/KSTokenView.swift b/KSTokenView/KSTokenView.swift index cf37f81..dd43672 100644 --- a/KSTokenView/KSTokenView.swift +++ b/KSTokenView/KSTokenView.swift @@ -426,7 +426,7 @@ open class KSTokenView: UIView { } override open var intrinsicContentSize : CGSize { - return CGSize(width: UIViewNoIntrinsicMetric, height: _intrinsicContentHeight) + return CGSize(width: UIViewNoIntrinsicMetric, height: _intrinsicContentHeight) } //MARK: - Public Methods From 487425488bd457c57d9728c28d382ab2ae3d0c01 Mon Sep 17 00:00:00 2001 From: harsharora99 Date: Thu, 24 Mar 2022 15:53:56 +0530 Subject: [PATCH 06/17] Changes to support multiple tokens in tokenField on selecting a single token in tableView for contact-lists --- KSTokenView/KSTokenView.swift | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/KSTokenView/KSTokenView.swift b/KSTokenView/KSTokenView.swift index dd43672..f2f1480 100644 --- a/KSTokenView/KSTokenView.swift +++ b/KSTokenView/KSTokenView.swift @@ -68,6 +68,7 @@ import UIKit @objc optional func tokenView(_ tokenView: KSTokenView, didSelectToken token: KSToken) @objc optional func tokenViewDidBeginEditing(_ tokenView: KSTokenView) @objc optional func tokenViewDidEndEditing(_ tokenView: KSTokenView) + @objc optional func tokenView(_ tokenView: KSTokenView, tokenObjectsFor selectedRowObject: AnyObject) -> [AnyObject]? @objc func tokenView(_ tokenView: KSTokenView, performSearchWithString string: String, completion: ((_ results: Array) -> Void)?) @objc func tokenView(_ tokenView: KSTokenView, displayTitleForObject object: AnyObject) -> String @@ -926,11 +927,17 @@ extension KSTokenView : UITextFieldDelegate { extension KSTokenView : UITableViewDelegate { public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - delegate?.tokenView?(self, didSelectRowAtIndexPath: indexPath) - let object: AnyObject = _resultArray[(indexPath as NSIndexPath).row] + delegate?.tokenView?(self, didSelectRowAtIndexPath: indexPath) + + let selectedRowObject: AnyObject = _resultArray[(indexPath as NSIndexPath).row] + + let objects: [AnyObject] = delegate?.tokenView?(self, tokenObjectsFor: selectedRowObject) ?? [selectedRowObject] + + for object in objects { let title = delegate?.tokenView(self, displayTitleForObject: object) let token = KSToken(title: title!, object: object) addToken(token) + } if (shouldHideSearchResultsOnSelect) { _hideSearchResults() From e1226eecce979017be5fba32ead7bd7f59c04d89 Mon Sep 17 00:00:00 2001 From: harsharora99 Date: Thu, 24 Mar 2022 20:20:43 +0530 Subject: [PATCH 07/17] minor code indentation change --- KSTokenView/KSTokenView.swift | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/KSTokenView/KSTokenView.swift b/KSTokenView/KSTokenView.swift index f2f1480..8ee11aa 100644 --- a/KSTokenView/KSTokenView.swift +++ b/KSTokenView/KSTokenView.swift @@ -68,7 +68,7 @@ import UIKit @objc optional func tokenView(_ tokenView: KSTokenView, didSelectToken token: KSToken) @objc optional func tokenViewDidBeginEditing(_ tokenView: KSTokenView) @objc optional func tokenViewDidEndEditing(_ tokenView: KSTokenView) - @objc optional func tokenView(_ tokenView: KSTokenView, tokenObjectsFor selectedRowObject: AnyObject) -> [AnyObject]? + @objc optional func tokenView(_ tokenView: KSTokenView, tokenObjectsFor selectedRowObject: AnyObject) -> [AnyObject]? @objc func tokenView(_ tokenView: KSTokenView, performSearchWithString string: String, completion: ((_ results: Array) -> Void)?) @objc func tokenView(_ tokenView: KSTokenView, displayTitleForObject object: AnyObject) -> String @@ -927,17 +927,17 @@ extension KSTokenView : UITextFieldDelegate { extension KSTokenView : UITableViewDelegate { public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - delegate?.tokenView?(self, didSelectRowAtIndexPath: indexPath) - - let selectedRowObject: AnyObject = _resultArray[(indexPath as NSIndexPath).row] + delegate?.tokenView?(self, didSelectRowAtIndexPath: indexPath) - let objects: [AnyObject] = delegate?.tokenView?(self, tokenObjectsFor: selectedRowObject) ?? [selectedRowObject] - - for object in objects { - let title = delegate?.tokenView(self, displayTitleForObject: object) - let token = KSToken(title: title!, object: object) - addToken(token) - } + let selectedRowObject: AnyObject = _resultArray[(indexPath as NSIndexPath).row] + + let objects: [AnyObject] = delegate?.tokenView?(self, tokenObjectsFor: selectedRowObject) ?? [selectedRowObject] + + for object in objects { + let title = delegate?.tokenView(self, displayTitleForObject: object) + let token = KSToken(title: title!, object: object) + addToken(token) + } if (shouldHideSearchResultsOnSelect) { _hideSearchResults() From ee28dd0f5920b4c2e9229be9ed588cd2764b6617 Mon Sep 17 00:00:00 2001 From: harsharora99 Date: Tue, 29 Mar 2022 14:05:39 +0530 Subject: [PATCH 08/17] Added function to notify delegate on item selection from table view --- KSTokenView/KSTokenView.swift | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/KSTokenView/KSTokenView.swift b/KSTokenView/KSTokenView.swift index 8ee11aa..728579d 100644 --- a/KSTokenView/KSTokenView.swift +++ b/KSTokenView/KSTokenView.swift @@ -68,13 +68,15 @@ import UIKit @objc optional func tokenView(_ tokenView: KSTokenView, didSelectToken token: KSToken) @objc optional func tokenViewDidBeginEditing(_ tokenView: KSTokenView) @objc optional func tokenViewDidEndEditing(_ tokenView: KSTokenView) - @objc optional func tokenView(_ tokenView: KSTokenView, tokenObjectsFor selectedRowObject: AnyObject) -> [AnyObject]? + @objc func tokenView(_ tokenView: KSTokenView, performSearchWithString string: String, completion: ((_ results: Array) -> Void)?) @objc func tokenView(_ tokenView: KSTokenView, displayTitleForObject object: AnyObject) -> String @objc optional func tokenView(_ tokenView: KSTokenView, withObject object: AnyObject, tableView: UITableView, cellForRowAtIndexPath indexPath: IndexPath) -> UITableViewCell @objc optional func tokenView(_ tokenView: KSTokenView, didSelectRowAtIndexPath indexPath: IndexPath) - + @objc optional func tokenView(_ tokenView: KSTokenView, didSelectRowObject object: AnyObject) + @objc optional func tokenView(_ tokenView: KSTokenView, tokenObjectsFor selectedRowObject: AnyObject) -> [AnyObject]? + @objc optional func tokenViewShouldDeleteAllToken(_ tokenView: KSTokenView) -> Bool @objc optional func tokenViewWillDeleteAllToken(_ tokenView: KSTokenView) @objc optional func tokenViewDidDeleteAllToken(_ tokenView: KSTokenView) @@ -931,6 +933,7 @@ extension KSTokenView : UITableViewDelegate { let selectedRowObject: AnyObject = _resultArray[(indexPath as NSIndexPath).row] + delegate?.tokenView?(self, didSelectRowObject: selectedRowObject) let objects: [AnyObject] = delegate?.tokenView?(self, tokenObjectsFor: selectedRowObject) ?? [selectedRowObject] for object in objects { From f81db1166b8fc6f7415b8e3ce83633f9bc42dbff Mon Sep 17 00:00:00 2001 From: harsharora99 Date: Mon, 18 Apr 2022 14:46:02 +0530 Subject: [PATCH 09/17] Added description for didSelectRowObject and tokenObjectsFor delegate functions --- KSTokenView/KSTokenView.swift | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/KSTokenView/KSTokenView.swift b/KSTokenView/KSTokenView.swift index 728579d..dd3c916 100644 --- a/KSTokenView/KSTokenView.swift +++ b/KSTokenView/KSTokenView.swift @@ -74,7 +74,23 @@ import UIKit @objc func tokenView(_ tokenView: KSTokenView, displayTitleForObject object: AnyObject) -> String @objc optional func tokenView(_ tokenView: KSTokenView, withObject object: AnyObject, tableView: UITableView, cellForRowAtIndexPath indexPath: IndexPath) -> UITableViewCell @objc optional func tokenView(_ tokenView: KSTokenView, didSelectRowAtIndexPath indexPath: IndexPath) + + /** + didSelectRowObject : Notifies delegate when a suggestion is selected from table view by the user + - parameter object: Selected object which is an element of "_resultArray" array + */ @objc optional func tokenView(_ tokenView: KSTokenView, didSelectRowObject object: AnyObject) + + /** + tokenObjectsFor : Notifies delegate when a suggestion is selected from table view by the user and expects list of token objects to be returned by the delegate, that are to be added in token Field for the given selection. + This function enables support of adding multiple objects in token Field, on selecting a single suggestion object in suggestion table view. + + - parameter selectedRowObject: Selected object which is an element of "_resultArray" array + + - returns: Optional array of objects which should be added to tokens field + + Note: If the function is not implemented by delegate OR function is implemented but nil is returned for a selection, then the selected suggestion object itself is added to tokens field. If an empty array is returned for a selection, then no token is added in tokens field. + */ @objc optional func tokenView(_ tokenView: KSTokenView, tokenObjectsFor selectedRowObject: AnyObject) -> [AnyObject]? @objc optional func tokenViewShouldDeleteAllToken(_ tokenView: KSTokenView) -> Bool From a076050f581ffc735d5d332ec382c0c10044168e Mon Sep 17 00:00:00 2001 From: harsharora99 Date: Tue, 19 Apr 2022 13:34:12 +0530 Subject: [PATCH 10/17] Fixed issue of disappearing recipient field label on removing a token from the field --- KSTokenView/KSTokenView.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/KSTokenView/KSTokenView.swift b/KSTokenView/KSTokenView.swift index dd3c916..7e8d77b 100644 --- a/KSTokenView/KSTokenView.swift +++ b/KSTokenView/KSTokenView.swift @@ -501,7 +501,6 @@ open class KSTokenView: UIView { _tokenField.removeToken(token, removingAll: removingAll) if (!removingAll) { delegate?.tokenView?(self, didDeleteToken: token) - _startSearchWithString("") } } From ee872dc2d6229d009c83230f84b8e534c0024134 Mon Sep 17 00:00:00 2001 From: harsharora99 Date: Thu, 21 Apr 2022 15:15:55 +0530 Subject: [PATCH 11/17] Added comments for better context --- KSTokenView/KSTokenView.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/KSTokenView/KSTokenView.swift b/KSTokenView/KSTokenView.swift index 7e8d77b..f4f6b56 100644 --- a/KSTokenView/KSTokenView.swift +++ b/KSTokenView/KSTokenView.swift @@ -945,10 +945,11 @@ extension KSTokenView : UITableViewDelegate { public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { delegate?.tokenView?(self, didSelectRowAtIndexPath: indexPath) - + //selectedRowObject can either be individual contact or a contact list let selectedRowObject: AnyObject = _resultArray[(indexPath as NSIndexPath).row] delegate?.tokenView?(self, didSelectRowObject: selectedRowObject) + //Will return multiple participants in case of contact list else will return a single participant. let objects: [AnyObject] = delegate?.tokenView?(self, tokenObjectsFor: selectedRowObject) ?? [selectedRowObject] for object in objects { From 2be439581ada6d7a809782d9adcf912549fd8859 Mon Sep 17 00:00:00 2001 From: harsharora99 Date: Tue, 10 May 2022 18:46:08 +0530 Subject: [PATCH 12/17] Changed the return type of tokenObjectsFor delegate function to non-optional from optional --- KSTokenView/KSTokenView.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/KSTokenView/KSTokenView.swift b/KSTokenView/KSTokenView.swift index f4f6b56..cc448cf 100644 --- a/KSTokenView/KSTokenView.swift +++ b/KSTokenView/KSTokenView.swift @@ -87,11 +87,11 @@ import UIKit - parameter selectedRowObject: Selected object which is an element of "_resultArray" array - - returns: Optional array of objects which should be added to tokens field + - returns: Array of objects which should be added to tokens field - Note: If the function is not implemented by delegate OR function is implemented but nil is returned for a selection, then the selected suggestion object itself is added to tokens field. If an empty array is returned for a selection, then no token is added in tokens field. + Note: If the function is not implemented by delegate, then the selected suggestion object (selectedRowObject) itself is added to tokens field. If an empty array is returned for a selection, then no token is added in tokens field. */ - @objc optional func tokenView(_ tokenView: KSTokenView, tokenObjectsFor selectedRowObject: AnyObject) -> [AnyObject]? + @objc optional func tokenView(_ tokenView: KSTokenView, tokenObjectsFor selectedRowObject: AnyObject) -> [AnyObject] @objc optional func tokenViewShouldDeleteAllToken(_ tokenView: KSTokenView) -> Bool @objc optional func tokenViewWillDeleteAllToken(_ tokenView: KSTokenView) From c7f72e16202c32d2b87868387aeba40a33dd4714 Mon Sep 17 00:00:00 2001 From: Fi4m Date: Thu, 11 Jan 2024 15:30:26 +0530 Subject: [PATCH 13/17] Added long press delegate to KSToken --- KSTokenView/KSTokenField.swift | 11 +++++++++++ KSTokenView/KSTokenView.swift | 6 ++++++ 2 files changed, 17 insertions(+) diff --git a/KSTokenView/KSTokenField.swift b/KSTokenView/KSTokenField.swift index 77b78d5..a751d2f 100644 --- a/KSTokenView/KSTokenField.swift +++ b/KSTokenView/KSTokenField.swift @@ -35,6 +35,7 @@ enum KSTokenFieldState { @objc optional func tokenFieldDidSelectToken(_ token: KSToken) @objc optional func tokenFieldDidBeginEditing(_ tokenField: KSTokenField) @objc optional func tokenFieldDidEndEditing(_ tokenField: KSTokenField) + func tokenLongPressed(_ token: KSToken) } @@ -244,6 +245,9 @@ open class KSTokenField: UITextField { if (!tokens.contains(token)) { token.addTarget(self, action: #selector(KSTokenField.tokenTouchDown(_:)), for: .touchDown) token.addTarget(self, action: #selector(KSTokenField.tokenTouchUpInside(_:)), for: .touchUpInside) + let longPressGesture = UILongPressGestureRecognizer(target: self, action: #selector(longPressGestureAction)) + token.addGestureRecognizer(longPressGesture) + tokens.append(token) _insertToken(token) } @@ -667,6 +671,13 @@ open class KSTokenField: UITextField { @objc func tokenTouchUpInside(_ token: KSToken) { selectToken(token) } + + @objc func longPressGestureAction(_ gesture: UILongPressGestureRecognizer) { + guard gesture.state == .began, + let token = gesture.view as? KSToken + else { return } + tokenFieldDelegate?.tokenLongPressed(token) + } override open func beginTracking(_ touch: UITouch, with event: UIEvent?) -> Bool { if (touch.view == self) { diff --git a/KSTokenView/KSTokenView.swift b/KSTokenView/KSTokenView.swift index cc448cf..0a92787 100644 --- a/KSTokenView/KSTokenView.swift +++ b/KSTokenView/KSTokenView.swift @@ -100,6 +100,8 @@ import UIKit @objc optional func tokenViewDidShowSearchResults(_ tokenView: KSTokenView) @objc optional func tokenViewDidHideSearchResults(_ tokenView: KSTokenView) + + func tokenView(_ tokenView: KSTokenView, didLongPress token: KSToken) } //MARK: - KSTokenView @@ -864,6 +866,10 @@ extension KSTokenView : KSTokenFieldDelegate { func tokenFieldShouldChangeHeight(_ height: CGFloat) { _changeHeight(height) } + + func tokenLongPressed(_ token: KSToken) { + delegate?.tokenView(self, didLongPress: token) + } } From 0eadb0447bdf2e9f8db71dc03261b769747bf642 Mon Sep 17 00:00:00 2001 From: Fi4m Date: Thu, 11 Jan 2024 15:49:26 +0530 Subject: [PATCH 14/17] Long press delegate function made optional --- KSTokenView/KSTokenField.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/KSTokenView/KSTokenField.swift b/KSTokenView/KSTokenField.swift index a751d2f..b25a946 100644 --- a/KSTokenView/KSTokenField.swift +++ b/KSTokenView/KSTokenField.swift @@ -35,7 +35,7 @@ enum KSTokenFieldState { @objc optional func tokenFieldDidSelectToken(_ token: KSToken) @objc optional func tokenFieldDidBeginEditing(_ tokenField: KSTokenField) @objc optional func tokenFieldDidEndEditing(_ tokenField: KSTokenField) - func tokenLongPressed(_ token: KSToken) + @objc optional func tokenLongPressed(_ token: KSToken) } From 50f48adc61d0192065dfddd8b51deac3e5ee0ec4 Mon Sep 17 00:00:00 2001 From: Fi4m Date: Thu, 11 Jan 2024 17:02:35 +0530 Subject: [PATCH 15/17] Correct delegate method made optional --- KSTokenView/KSTokenField.swift | 3 ++- KSTokenView/KSTokenView.swift | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/KSTokenView/KSTokenField.swift b/KSTokenView/KSTokenField.swift index b25a946..672d6d5 100644 --- a/KSTokenView/KSTokenField.swift +++ b/KSTokenView/KSTokenField.swift @@ -35,7 +35,7 @@ enum KSTokenFieldState { @objc optional func tokenFieldDidSelectToken(_ token: KSToken) @objc optional func tokenFieldDidBeginEditing(_ tokenField: KSTokenField) @objc optional func tokenFieldDidEndEditing(_ tokenField: KSTokenField) - @objc optional func tokenLongPressed(_ token: KSToken) + func tokenLongPressed(_ token: KSToken) } @@ -676,6 +676,7 @@ open class KSTokenField: UITextField { guard gesture.state == .began, let token = gesture.view as? KSToken else { return } + tokenTouchUpInside(token) tokenFieldDelegate?.tokenLongPressed(token) } diff --git a/KSTokenView/KSTokenView.swift b/KSTokenView/KSTokenView.swift index 0a92787..8bac886 100644 --- a/KSTokenView/KSTokenView.swift +++ b/KSTokenView/KSTokenView.swift @@ -101,7 +101,7 @@ import UIKit @objc optional func tokenViewDidShowSearchResults(_ tokenView: KSTokenView) @objc optional func tokenViewDidHideSearchResults(_ tokenView: KSTokenView) - func tokenView(_ tokenView: KSTokenView, didLongPress token: KSToken) + @objc optional func tokenView(_ tokenView: KSTokenView, didLongPress token: KSToken) } //MARK: - KSTokenView @@ -868,7 +868,7 @@ extension KSTokenView : KSTokenFieldDelegate { } func tokenLongPressed(_ token: KSToken) { - delegate?.tokenView(self, didLongPress: token) + delegate?.tokenView?(self, didLongPress: token) } } From 909bbac65d10cddcd991e5d4f9ad754af30abd66 Mon Sep 17 00:00:00 2001 From: Fi4m Date: Fri, 19 Jan 2024 13:49:24 +0530 Subject: [PATCH 16/17] Increased KSToken font size --- KSTokenView/KSToken.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/KSTokenView/KSToken.swift b/KSTokenView/KSToken.swift index d801a6c..3803a72 100644 --- a/KSTokenView/KSToken.swift +++ b/KSTokenView/KSToken.swift @@ -148,7 +148,7 @@ open class KSToken : UIControl { rectanglePath.fill() var paddingX: CGFloat = 0.0 - var font = UIFont.systemFont(ofSize: 14) + var font = UIFont.systemFont(ofSize: 16) var tokenField: KSTokenField? { return superview! as? KSTokenField } From 0dc860c2bf26a6a1d113ce778dd3a22c83844472 Mon Sep 17 00:00:00 2001 From: Fi4m Date: Tue, 23 Jan 2024 01:24:16 +0530 Subject: [PATCH 17/17] Added tokenFieldMaxY --- KSTokenView/KSTokenView.swift | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/KSTokenView/KSTokenView.swift b/KSTokenView/KSTokenView.swift index 8bac886..564c99a 100644 --- a/KSTokenView/KSTokenView.swift +++ b/KSTokenView/KSTokenView.swift @@ -376,6 +376,10 @@ open class KSTokenView: UIView { _updateTokenFieldLayout(style) } } + + public var tokenFieldMaxY: CGFloat { + _tokenField.frame.maxY + } //MARK: - Constructors //__________________________________________________________________________________