From 9a94b2b625743711cf7a545c43e4997d1fef0f01 Mon Sep 17 00:00:00 2001 From: BatyrOvezdurdyyev Date: Sun, 20 Jun 2021 15:50:55 +0500 Subject: [PATCH 1/2] you can add code to hashtag --- Hashtags/Classes/Hashtag.swift | 16 +++---- .../Classes/HashtagCollectionViewCell.swift | 26 ++++++------ Hashtags/Classes/HashtagConfiguration.swift | 20 ++++----- Hashtags/Classes/HashtagView.swift | 42 +++++++++++-------- Hashtags/Classes/HashtagViewDelegate.swift | 1 + .../RemovableHashtagCollectionViewCell.swift | 26 ++++++------ 6 files changed, 70 insertions(+), 61 deletions(-) diff --git a/Hashtags/Classes/Hashtag.swift b/Hashtags/Classes/Hashtag.swift index ee93e1a..b0c3889 100644 --- a/Hashtags/Classes/Hashtag.swift +++ b/Hashtags/Classes/Hashtag.swift @@ -30,14 +30,16 @@ extension Array where Element: Equatable { open class HashTag: Equatable { - open var text: String - open var isRemovable: Bool - open var hasHashSymbol: Bool - open var configuration: HashtagConfiguration? + open var code : String + open var text : String + open var isRemovable : Bool + open var hasHashSymbol : Bool + open var configuration : HashtagConfiguration? - public init(word: String, withHashSymbol: Bool = true, isRemovable: Bool = false) { - self.text = word - self.isRemovable = isRemovable + public init(word: String, code: String, withHashSymbol: Bool = true, isRemovable: Bool = false) { + self.text = word + self.code = code + self.isRemovable = isRemovable self.hasHashSymbol = withHashSymbol if hasHashSymbol { diff --git a/Hashtags/Classes/HashtagCollectionViewCell.swift b/Hashtags/Classes/HashtagCollectionViewCell.swift index eaa0d97..638b4d5 100644 --- a/Hashtags/Classes/HashtagCollectionViewCell.swift +++ b/Hashtags/Classes/HashtagCollectionViewCell.swift @@ -13,15 +13,15 @@ open class HashtagCollectionViewCell: UICollectionViewCell { static let cellIdentifier = "HashtagCollectionViewCell" - var paddingLeftConstraint: NSLayoutConstraint? - var paddingRightConstraint: NSLayoutConstraint? - var paddingTopConstraint: NSLayoutConstraint? - var paddingBottomConstraint: NSLayoutConstraint? + var paddingLeftConstraint : NSLayoutConstraint? + var paddingRightConstraint : NSLayoutConstraint? + var paddingTopConstraint : NSLayoutConstraint? + var paddingBottomConstraint : NSLayoutConstraint? lazy var wordLabel : UILabel = { - let lbl = UILabel() - lbl.textColor = UIColor.white - lbl.textAlignment = .center + let lbl = UILabel() + lbl.textColor = UIColor.white + lbl.textAlignment = .center lbl.translatesAutoresizingMaskIntoConstraints = false return lbl }() @@ -63,18 +63,18 @@ open class HashtagCollectionViewCell: UICollectionViewCell { } open func configureWithTag(tag: HashTag, configuration: HashtagConfiguration) { - self.hashtag = tag + self.hashtag = tag wordLabel.text = tag.text - self.paddingLeftConstraint!.constant = configuration.paddingLeft - self.paddingTopConstraint!.constant = configuration.paddingTop + self.paddingLeftConstraint!.constant = configuration.paddingLeft + self.paddingTopConstraint!.constant = configuration.paddingTop self.paddingBottomConstraint!.constant = -1 * configuration.paddingBottom - self.paddingRightConstraint!.constant = -1 * configuration.paddingRight + self.paddingRightConstraint!.constant = -1 * configuration.paddingRight self.layer.cornerRadius = configuration.cornerRadius - self.backgroundColor = configuration.backgroundColor + self.backgroundColor = configuration.backgroundColor self.wordLabel.textColor = configuration.textColor - self.wordLabel.font = UIFont.systemFont(ofSize: configuration.textSize) + self.wordLabel.font = UIFont.systemFont(ofSize : configuration.textSize) } } diff --git a/Hashtags/Classes/HashtagConfiguration.swift b/Hashtags/Classes/HashtagConfiguration.swift index f691223..2a46e83 100644 --- a/Hashtags/Classes/HashtagConfiguration.swift +++ b/Hashtags/Classes/HashtagConfiguration.swift @@ -8,14 +8,14 @@ import Foundation open class HashtagConfiguration { - var paddingLeft: CGFloat = 0.0 - var paddingTop: CGFloat = 0.0 - var paddingRight: CGFloat = 0.0 - var paddingBottom: CGFloat = 0.0 - var removeButtonSize: CGFloat = 0.0 - var removeButtonSpacing: CGFloat = 0.0 - var cornerRadius: CGFloat = 0.0 - var textSize: CGFloat = 0.0 - var textColor = UIColor() - var backgroundColor = UIColor() + var paddingLeft : CGFloat = 0.0 + var paddingTop : CGFloat = 0.0 + var paddingRight : CGFloat = 0.0 + var paddingBottom : CGFloat = 0.0 + var removeButtonSize : CGFloat = 0.0 + var removeButtonSpacing : CGFloat = 0.0 + var cornerRadius : CGFloat = 0.0 + var textSize : CGFloat = 0.0 + var textColor = UIColor() + var backgroundColor = UIColor() } diff --git a/Hashtags/Classes/HashtagView.swift b/Hashtags/Classes/HashtagView.swift index 6c33ecc..bc82525 100644 --- a/Hashtags/Classes/HashtagView.swift +++ b/Hashtags/Classes/HashtagView.swift @@ -174,9 +174,9 @@ open class HashtagView: UIView { override open func prepareForInterfaceBuilder() { super.prepareForInterfaceBuilder() - self.addTag(tag: HashTag(word: "hashtag")) - self.addTag(tag: HashTag(word: "hashtag", withHashSymbol: true, isRemovable: false)) - self.addTag(tag: HashTag(word: "RemovableHashtag", isRemovable: true)) + self.addTag(tag: HashTag(word: "hashtag", code: "hashtag")) + self.addTag(tag: HashTag(word: "hashtag", code: "hashtag", withHashSymbol: true, isRemovable: false)) + self.addTag(tag: HashTag(word: "RemovableHashtag", code: "RemovableHashtag", isRemovable: true)) } open override var intrinsicContentSize: CGSize { @@ -202,16 +202,16 @@ open class HashtagView: UIView { let configuration = HashtagConfiguration() - configuration.paddingLeft = self.tagPaddingLeft - configuration.paddingRight = self.tagPaddingRight - configuration.paddingTop = self.tagPaddingTop - configuration.paddingBottom = self.tagPaddingBottom - configuration.removeButtonSize = self.removeButtonSize + configuration.paddingLeft = self.tagPaddingLeft + configuration.paddingRight = self.tagPaddingRight + configuration.paddingTop = self.tagPaddingTop + configuration.paddingBottom = self.tagPaddingBottom + configuration.removeButtonSize = self.removeButtonSize configuration.removeButtonSpacing = self.removeButtonSpacing - configuration.backgroundColor = self.tagBackgroundColor - configuration.cornerRadius = self.tagCornerRadius - configuration.textSize = self.textSize - configuration.textColor = self.tagTextColor + configuration.backgroundColor = self.tagBackgroundColor + configuration.cornerRadius = self.tagCornerRadius + configuration.textSize = self.textSize + configuration.textColor = self.tagTextColor return configuration } @@ -229,13 +229,13 @@ open class HashtagView: UIView { bottom: self.containerPaddingBottom, right: self.containerPaddingRight) - self.collectionView.showsVerticalScrollIndicator = false + self.collectionView.showsVerticalScrollIndicator = false self.collectionView.showsHorizontalScrollIndicator = false - self.collectionView.collectionViewLayout = alignedFlowLayout - self.collectionView.delegate = self - self.collectionView.dataSource = self - self.collectionView.backgroundColor = UIColor.clear - self.collectionView.isScrollEnabled = false + self.collectionView.collectionViewLayout = alignedFlowLayout + self.collectionView.delegate = self + self.collectionView.dataSource = self + self.collectionView.backgroundColor = UIColor.clear + self.collectionView.isScrollEnabled = false self.collectionView.register(HashtagCollectionViewCell.self, forCellWithReuseIdentifier: HashtagCollectionViewCell.cellIdentifier) @@ -337,6 +337,12 @@ extension HashtagView: UICollectionViewDelegate, UICollectionViewDataSource { cell.configureWithTag(tag: hashtag, configuration: makeConfiguration()) return cell } + + public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + let hashtag: HashTag = self.hashtags[indexPath.item] + + self.delegate?.didSelectTag(hashtag: hashtag) + } } extension HashtagView: UICollectionViewDelegateFlowLayout { diff --git a/Hashtags/Classes/HashtagViewDelegate.swift b/Hashtags/Classes/HashtagViewDelegate.swift index 68cfac8..b988687 100644 --- a/Hashtags/Classes/HashtagViewDelegate.swift +++ b/Hashtags/Classes/HashtagViewDelegate.swift @@ -10,4 +10,5 @@ import Foundation public protocol HashtagViewDelegate: class { func hashtagRemoved(hashtag: HashTag) func viewShouldResizeTo(size: CGSize) + func didSelectTag(hashtag: HashTag) } diff --git a/Hashtags/Classes/RemovableHashtagCollectionViewCell.swift b/Hashtags/Classes/RemovableHashtagCollectionViewCell.swift index 3e8fa38..8386cc0 100644 --- a/Hashtags/Classes/RemovableHashtagCollectionViewCell.swift +++ b/Hashtags/Classes/RemovableHashtagCollectionViewCell.swift @@ -21,13 +21,13 @@ open class RemovableHashtagCollectionViewCell: UICollectionViewCell { static let cellIdentifier = "RemovableHashtagCollectionViewCell" - var paddingLeftConstraint: NSLayoutConstraint? - var paddingRightConstraint: NSLayoutConstraint? - var paddingTopConstraint: NSLayoutConstraint? - var paddingBottomConstraint: NSLayoutConstraint? - var removeButtonHeightConstraint: NSLayoutConstraint? - var removeButtonWidthConstraint: NSLayoutConstraint? - var removeButtonSpacingConstraint: NSLayoutConstraint? + var paddingLeftConstraint : NSLayoutConstraint? + var paddingRightConstraint : NSLayoutConstraint? + var paddingTopConstraint : NSLayoutConstraint? + var paddingBottomConstraint : NSLayoutConstraint? + var removeButtonHeightConstraint : NSLayoutConstraint? + var removeButtonWidthConstraint : NSLayoutConstraint? + var removeButtonSpacingConstraint : NSLayoutConstraint? lazy var wordLabel : UILabel = { let lbl = UILabel() @@ -113,16 +113,16 @@ extension RemovableHashtagCollectionViewCell { self.hashtag = tag wordLabel.text = tag.text - self.paddingLeftConstraint!.constant = configuration.paddingLeft - self.paddingTopConstraint!.constant = configuration.paddingTop - self.paddingBottomConstraint!.constant = -1 * configuration.paddingBottom + self.paddingLeftConstraint!.constant = configuration.paddingLeft + self.paddingTopConstraint!.constant = configuration.paddingTop + self.paddingBottomConstraint!.constant = -1 * configuration.paddingBottom self.removeButtonSpacingConstraint!.constant = configuration.removeButtonSpacing - self.removeButtonWidthConstraint!.constant = configuration.removeButtonSize + self.removeButtonWidthConstraint!.constant = configuration.removeButtonSize self.layer.cornerRadius = configuration.cornerRadius - self.backgroundColor = configuration.backgroundColor + self.backgroundColor = configuration.backgroundColor self.wordLabel.textColor = configuration.textColor - self.wordLabel.font = UIFont.systemFont(ofSize: configuration.textSize) + self.wordLabel.font = UIFont.systemFont(ofSize : configuration.textSize) } } From 3f7561bc4a56fdff06ad8b9366f11f9cfabf87dd Mon Sep 17 00:00:00 2001 From: BatyrOvezdurdyyev Date: Sun, 20 Jun 2021 16:11:33 +0500 Subject: [PATCH 2/2] removed configurations from storyboard (IBDesignables) --- Hashtags/Classes/HashtagView.swift | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/Hashtags/Classes/HashtagView.swift b/Hashtags/Classes/HashtagView.swift index bc82525..1bf4a01 100644 --- a/Hashtags/Classes/HashtagView.swift +++ b/Hashtags/Classes/HashtagView.swift @@ -11,7 +11,6 @@ import AlignedCollectionViewFlowLayout // MARK: Class -@IBDesignable open class HashtagView: UIView { private var sizingLabel = UILabel(frame: .zero) @@ -30,7 +29,6 @@ open class HashtagView: UIView { public var delegate: HashtagViewDelegate? - @IBInspectable open var cornerRadius: CGFloat = 5.0 { didSet { self.layer.cornerRadius = self.cornerRadius @@ -39,28 +37,24 @@ open class HashtagView: UIView { // MARK: Container padding (insets) - @IBInspectable open var containerPaddingLeft: CGFloat = 10.0 { didSet { setup() } } - @IBInspectable open var containerPaddingRight: CGFloat = 10.0 { didSet { setup() } } - @IBInspectable open var containerPaddingTop: CGFloat = 10.0 { didSet { setup() } } - @IBInspectable open var containerPaddingBottom: CGFloat = 10.0 { didSet { setup() @@ -69,56 +63,48 @@ open class HashtagView: UIView { // MARK: Hashtag cell padding - @IBInspectable open var tagPaddingLeft: CGFloat = 5.0 { didSet { self.collectionView.reloadData() } } - @IBInspectable open var tagPaddingRight: CGFloat = 5.0 { didSet { self.collectionView.reloadData() } } - @IBInspectable open var tagPaddingTop: CGFloat = 5.0 { didSet { self.collectionView.reloadData() } } - @IBInspectable open var tagPaddingBottom: CGFloat = 5.0 { didSet { self.collectionView.reloadData() } } - @IBInspectable open var tagCornerRadius: CGFloat = 5.0 { didSet { self.collectionView.reloadData() } } - @IBInspectable open var textSize: CGFloat = 14.0 { didSet { self.collectionView.reloadData() } } - @IBInspectable open var tagBackgroundColor: UIColor = .lightGray { didSet { self.collectionView.reloadData() } } - @IBInspectable open var tagTextColor: UIColor = .white { didSet { self.collectionView.reloadData() @@ -126,13 +112,12 @@ open class HashtagView: UIView { } - @IBInspectable open var removeButtonSize: CGFloat = 10.0 { didSet { self.collectionView.reloadData() } } - @IBInspectable + open var removeButtonSpacing: CGFloat = 5.0 { didSet { self.collectionView.reloadData() @@ -141,14 +126,12 @@ open class HashtagView: UIView { // MARK: Hashtags cell margins - @IBInspectable open var horizontalTagSpacing: CGFloat = 5.0 { didSet { setup() } } - @IBInspectable open var verticalTagSpacing: CGFloat = 5.0 { didSet { setup()