From 870658b4c1d9ddd6512a331e96563bf52ed6a9bf Mon Sep 17 00:00:00 2001 From: Damodaram <> Date: Wed, 8 Apr 2020 17:18:05 +0530 Subject: [PATCH] subtext label implemented --- .../Views/RadioBoxCollectionViewCell.swift | 47 +++++++++++++------ .../Atomic/Atoms/Views/RadioBoxModel.swift | 5 ++ MVMCoreUI/Atomic/Atoms/Views/RadioBoxes.swift | 12 +++-- 3 files changed, 47 insertions(+), 17 deletions(-) diff --git a/MVMCoreUI/Atomic/Atoms/Views/RadioBoxCollectionViewCell.swift b/MVMCoreUI/Atomic/Atoms/Views/RadioBoxCollectionViewCell.swift index 67068c85..d959285d 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/RadioBoxCollectionViewCell.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/RadioBoxCollectionViewCell.swift @@ -9,18 +9,20 @@ import Foundation open class RadioBoxCollectionViewCell: UICollectionViewCell, MoleculeViewProtocol { - public let bodyLabel = Label.commonLabelB2(true) + public let bodyLabel = Label(frame: .zero) + public let subTextLabel = Label(frame: .zero) public let lineView = View(frame: .zero) var bottomView = MVMCoreUICommonViewsUtility.commonView() public var lineViewHeight: NSLayoutConstraint? public var fieldValue: String? + var boxModel: RadioBoxModel! open override var isSelected: Bool{ didSet{ - self.lineViewHeight?.constant = self.isSelected ? 4.0 : 0 - UIView.animate(withDuration: 0.5) { - self.layoutIfNeeded() + if let shapeLayer = self.bottomView.layer.sublayers?.filter({$0.name == "outofstock"}).first as? CAShapeLayer { + shapeLayer.strokeColor = isSelected ? UIColor.black.cgColor : UIColor.mfGet(forHex: "#747676").cgColor } + self.lineViewHeight?.constant = self.isSelected ? 4.0 : 0 self.bottomView.layer.sublayers?.filter({$0.name == "border"}).forEach({$0.removeFromSuperlayer()}) if(self.isSelected){ self.bottomView.layer.addBorder(edge: .bottom, color: UIColor.mfGet(forHex: "#0000"), thickness: 1.0) @@ -28,8 +30,11 @@ open class RadioBoxCollectionViewCell: UICollectionViewCell, MoleculeViewProtoco self.bottomView.layer.addBorder(edge: .right, color: UIColor.mfGet(forHex: "#0000"), thickness: 1.0) } else { - self.addBordertoView() + self.addBordertoView("#747676") } + UIView.animate(withDuration: 0.5) { + self.layoutIfNeeded() + } } } @@ -77,7 +82,18 @@ open class RadioBoxCollectionViewCell: UICollectionViewCell, MoleculeViewProtoco bottomView.addSubview(bodyLabel) NSLayoutConstraint.constraintPinSubview(bodyLabel, pinTop: false, topConstant:0 , pinBottom: false, bottomConstant: 0, pinLeft: true, leftConstant: 12, pinRight: true, rightConstant: 12) bodyLabel.topAnchor.constraint(equalTo: lineView.bottomAnchor, constant: 12).isActive = true - bodyLabel.bottomAnchor.constraint(lessThanOrEqualTo: bottomView.bottomAnchor, constant: -12.0).isActive = true + + subTextLabel.numberOfLines = 1 + bottomView.addSubview(subTextLabel) + NSLayoutConstraint.constraintPinSubview(subTextLabel, pinTop: false, topConstant:0 , pinBottom: false, bottomConstant: 0, pinLeft: true, leftConstant: 12, pinRight: true, rightConstant: 12) + subTextLabel.bottomAnchor.constraint(lessThanOrEqualTo: bottomView.bottomAnchor, constant: -12.0).isActive = true + subTextLabel.topAnchor.constraint(equalTo: bodyLabel.bottomAnchor, constant: 2).isActive = true + + subTextLabel.font = MFFonts.mfFontTXRegular(11.0) + bodyLabel.font = MFFonts.mfFontTXRegular(13.0) + subTextLabel.textColor = UIColor.mfGet(forHex: "#747676") + + } public func updateView(_ size: CGFloat) { @@ -85,15 +101,16 @@ open class RadioBoxCollectionViewCell: UICollectionViewCell, MoleculeViewProtoco self.bottomView.setNeedsLayout() self.bottomView.layer.sublayers?.filter({$0.name == "border"}).forEach({$0.removeFromSuperlayer()}) DispatchQueue.main.async { [weak self] in - self?.addBordertoView() + guard let self = self else { return } + self.addBordertoView(self.boxModel.enabled ? "#747676" : "#D8DADA") } } - private func addBordertoView(){ - bottomView.layer.addBorder(edge: .bottom, color: UIColor.mfGet(forHex: "#747676"), thickness: 1.0) - bottomView.layer.addBorder(edge: .left, color: UIColor.mfGet(forHex: "#747676"), thickness: 1.0) - bottomView.layer.addBorder(edge: .right, color: UIColor.mfGet(forHex: "#747676"), thickness: 1.0) - bottomView.layer.addBorder(edge: .top, color: UIColor.mfGet(forHex: "#747676"), thickness: 1.0) + private func addBordertoView(_ color:String){ + bottomView.layer.addBorder(edge: .bottom, color: UIColor.mfGet(forHex: color), thickness: 1.0) + bottomView.layer.addBorder(edge: .left, color: UIColor.mfGet(forHex: color), thickness: 1.0) + bottomView.layer.addBorder(edge: .right, color: UIColor.mfGet(forHex: color), thickness: 1.0) + bottomView.layer.addBorder(edge: .top, color: UIColor.mfGet(forHex: color), thickness: 1.0) } private func addOutOfStockLine(){ @@ -103,20 +120,22 @@ open class RadioBoxCollectionViewCell: UICollectionViewCell, MoleculeViewProtoco let shapeLayer = CAShapeLayer() shapeLayer.name = "outofstock" shapeLayer.path = path.cgPath - shapeLayer.strokeColor = UIColor.darkGray.cgColor + shapeLayer.strokeColor = self.boxModel.enabled ? UIColor.black.cgColor : UIColor.mfGet(forHex: "#D8DADA").cgColor shapeLayer.lineWidth = 0.5 bottomView.layer.addSublayer(shapeLayer) } public func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { guard let collectionModel = model as? RadioBoxModel else { return } + boxModel = collectionModel if let backgroundColor = collectionModel.backgroundColor { bottomView.backgroundColor = backgroundColor.uiColor } self.isUserInteractionEnabled = collectionModel.enabled lineView.backgroundColor = collectionModel.selectedAccentColor?.uiColor bodyLabel.text = collectionModel.text - isSelected = collectionModel.selected + subTextLabel.text = collectionModel.subText +// isSelected = collectionModel.selected fieldValue = collectionModel.fieldValue isOutOfStock = collectionModel.strikethrough diff --git a/MVMCoreUI/Atomic/Atoms/Views/RadioBoxModel.swift b/MVMCoreUI/Atomic/Atoms/Views/RadioBoxModel.swift index 31f58e53..4ce1e302 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/RadioBoxModel.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/RadioBoxModel.swift @@ -10,6 +10,7 @@ import Foundation @objcMembers public class RadioBoxModel: MoleculeModelProtocol { public static var identifier: String = "radioBox" public var text: String + public var subText: String? public var backgroundColor: Color? = Color(uiColor: .white) public var selectedAccentColor: Color? = try? Color(colorString: "#D52B1E") public var selected: Bool = false @@ -20,6 +21,7 @@ import Foundation private enum CodingKeys: String, CodingKey { case moleculeName case text + case subText case selectedAccentColor case backgroundColor case selected @@ -31,6 +33,7 @@ import Foundation required public init(from decoder: Decoder) throws { let typeContainer = try decoder.container(keyedBy: CodingKeys.self) text = try typeContainer.decode(String.self, forKey: .text) + subText = try typeContainer.decodeIfPresent(String.self, forKey: .subText) if let color = try typeContainer.decodeIfPresent(Color.self, forKey: .selectedAccentColor) { selectedAccentColor = color } @@ -52,6 +55,8 @@ import Foundation public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) try container.encode(moleculeName, forKey: .moleculeName) + try container.encode(text, forKey: .text) + try container.encodeIfPresent(subText, forKey: .subText) try container.encodeIfPresent(selectedAccentColor, forKey: .selectedAccentColor) try container.encodeIfPresent(backgroundColor, forKey: .backgroundColor) try container.encodeIfPresent(selected, forKey: .selected) diff --git a/MVMCoreUI/Atomic/Atoms/Views/RadioBoxes.swift b/MVMCoreUI/Atomic/Atoms/Views/RadioBoxes.swift index 90a0d684..ec0689bc 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/RadioBoxes.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/RadioBoxes.swift @@ -56,9 +56,15 @@ open class RadioBoxes: View { @objc override open func updateView(_ size: CGFloat) { collectionView.collectionViewLayout.invalidateLayout() DispatchQueue.main.async { [weak self] in - self?.setNeedsDisplay() - self?.collectionView.layoutIfNeeded() - self?.collectionView.reloadData() + guard let self = self else { return } + self.setNeedsDisplay() + self.collectionView.layoutIfNeeded() + self.collectionView.reloadData() + guard let firstSelectedIndex = self.boxes?.firstIndex(where: {$0.selected == true}) else { + return + } + self.collectionView.selectItem(at: IndexPath(item: firstSelectedIndex, section: 0), animated: true, scrollPosition: .centeredHorizontally) + } }