Modified code based on review comments

Molecule class conforming to TableViewCell instead of Container.
Model class conforming to ListItemModelProtocol instead of MoleculeModelProtocol
Removed extra spaces and added comments
This commit is contained in:
Lekshmi S 2020-02-11 08:39:09 +05:30
parent 5686fea2c8
commit 66f0cf6b8e
2 changed files with 80 additions and 46 deletions

View File

@ -9,24 +9,40 @@
import Foundation import Foundation
import UIKit import UIKit
@objcMembers public class LeftVariableIconRightCaretList : Container { @objcMembers public class LeftVariableIconRightCaretList: TableViewCell {
//----------------------------------------------------- //-----------------------------------------------------
// MARK: - Outlets // MARK: - Outlets
//------------------------------------------------------- //-------------------------------------------------------
let leftImage = MFLoadImageView() let leftImage = MFLoadImageView()
let leftLabel = Label(frame: .zero) let leftLabel = Label.commonLabelB2(true)
let rightLabel = Label(frame: .zero) let rightLabel = Label.commonLabelB2(true)
let containerView = ViewConstrainingView()
//------------------------------------------------------ //------------------------------------------------------
// MARK: - Properties // MARK: - Properties
//------------------------------------------------------- //------------------------------------------------------
let spaceBetweenLabels : CGFloat = 180
let horizontalPadding : CGFloat = 14
let imageSize : CGFloat = 30
let cellHeight: CGFloat = 79
let leftPadding: CGFloat = 35
let spaceBetweenImageAndLeftLabel: CGFloat = 16
let imageSize: CGFloat = 30
let spaceBetweenLabels: CGFloat = 40
let rightPadding: CGFloat = 54
//------------------------------------------------------
// MARK: - Initialization
//--------------------------------------------------------
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setupView()
}
required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
//----------------------------------------------------- //-----------------------------------------------------
// MARK: - View Lifecycle // MARK: - View Lifecycle
@ -34,10 +50,10 @@ import UIKit
open override func updateView(_ size: CGFloat) { open override func updateView(_ size: CGFloat) {
super.updateView(size) super.updateView(size)
containerView.updateView(size)
leftImage.updateView(size) leftImage.updateView(size)
leftLabel.updateView(size) leftLabel.updateView(size)
rightLabel.updateView(size) rightLabel.updateView(size)
} }
override open func setupView() { override open func setupView() {
@ -45,30 +61,36 @@ import UIKit
guard leftImage.superview == nil else { guard leftImage.superview == nil else {
return return
} }
containerView.translatesAutoresizingMaskIntoConstraints = false
contentView.heightAnchor.constraint(equalToConstant: cellHeight).isActive = true
contentView.addSubview(containerView)
let container = MVMCoreUICommonViewsUtility.commonView() //containerView constraints
containerView.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true
containerView.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true
containerView.topAnchor.constraint(equalTo: topAnchor).isActive = true
containerView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
addAndContain(container) containerView.addSubview(leftImage)
container.addSubview(leftImage) containerView.addSubview(leftLabel)
container.addSubview(leftLabel) containerView.addSubview(rightLabel)
container.addSubview(rightLabel)
self.translatesAutoresizingMaskIntoConstraints = false //leftImage constraints
leftImage.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: leftPadding).isActive = true
leftImage.leadingAnchor.constraint(equalTo: container.leadingAnchor).isActive = true leftImage.centerYAnchor.constraint(equalTo: leftLabel.centerYAnchor).isActive = true
leftImage.topAnchor.constraint(equalTo: container.topAnchor).isActive = true
leftImage.bottomAnchor.constraint(equalTo: container.bottomAnchor).isActive = true
leftImage.widthAnchor.constraint(equalToConstant: imageSize).isActive = true leftImage.widthAnchor.constraint(equalToConstant: imageSize).isActive = true
leftImage.heightAnchor.constraint(equalToConstant: imageSize).isActive = true leftImage.heightAnchor.constraint(equalToConstant: imageSize).isActive = true
leftLabel.leadingAnchor.constraint(equalTo: leftImage.trailingAnchor, constant: horizontalPadding).isActive = true //leftLabel constraints
leftLabel.topAnchor.constraint(equalTo: container.topAnchor).isActive = true leftLabel.leadingAnchor.constraint(equalTo: leftImage.trailingAnchor, constant: spaceBetweenImageAndLeftLabel).isActive = true
leftLabel.bottomAnchor.constraint(equalTo: container.bottomAnchor).isActive = true leftLabel.topAnchor.constraint(equalTo: containerView.topAnchor).isActive = true
leftLabel.bottomAnchor.constraint(equalTo: containerView.bottomAnchor).isActive = true
//rightLabel constraints
rightLabel.leadingAnchor.constraint(equalTo: leftLabel.trailingAnchor,constant: spaceBetweenLabels).isActive = true rightLabel.leadingAnchor.constraint(greaterThanOrEqualTo: leftLabel.trailingAnchor, constant: spaceBetweenLabels).isActive = true
rightLabel.topAnchor.constraint(equalTo: container.topAnchor).isActive = true rightLabel.topAnchor.constraint(equalTo: containerView.topAnchor).isActive = true
rightLabel.bottomAnchor.constraint(equalTo: container.bottomAnchor).isActive = true rightLabel.bottomAnchor.constraint(equalTo: containerView.bottomAnchor).isActive = true
containerView.trailingAnchor.constraint(equalTo: rightLabel.trailingAnchor,constant: rightPadding).isActive = true
} }
//---------------------------------------------------- //----------------------------------------------------
@ -77,17 +99,14 @@ import UIKit
override open func reset() { override open func reset() {
super.reset() super.reset()
leftImage.reset() leftImage.reset()
leftLabel.reset() leftLabel.reset()
rightLabel.reset() rightLabel.reset()
} }
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.setWithModel(model, delegateObject, additionalData)
guard let model = model as? LeftVariableIconRightCaretListModel else { return} guard let model = model as? LeftVariableIconRightCaretListModel else { return}
leftImage.setWithModel(model.image, delegateObject, additionalData) leftImage.setWithModel(model.image, delegateObject, additionalData)
leftLabel.setWithModel(model.leftLabel, delegateObject, additionalData) leftLabel.setWithModel(model.leftLabel, delegateObject, additionalData)
rightLabel.setWithModel(model.rightLabel, delegateObject, additionalData) rightLabel.setWithModel(model.rightLabel, delegateObject, additionalData)

View File

@ -8,31 +8,38 @@
import Foundation import Foundation
public class LeftVariableIconRightCaretListModel: MoleculeModelProtocol { public class LeftVariableIconRightCaretListModel: ContainerModel, ListItemModelProtocol {
public var horizontalAlignment: UIStackView.Alignment? public var line: LineModel?
public var verticalAlignment: UIStackView.Alignment? public var hideArrow: Bool? = false
public var useHorizontalMargins: Bool?
public var useVerticalMargins: Bool?
public var topMarginPadding: CGFloat?
public var bottomMarginPadding: CGFloat?
public var line: LineModel? = LineModel(type: .standard)
public var hideArrow: Bool?
public var backgroundColor: Color? public var backgroundColor: Color?
public var action: ActionModelProtocol?
public static var identifier: String = "listLVImg" public static var identifier: String = "listLVImg"
public var image: ImageViewModel public var image: ImageViewModel
public var leftLabel: LabelModel public var leftLabel: LabelModel
public var rightLabel: LabelModel public var rightLabel: LabelModel
func setDefaults() {
if useHorizontalMargins == nil {
useHorizontalMargins = true
}
if useVerticalMargins == nil {
useVerticalMargins = true
}
if topMarginPadding == nil {
topMarginPadding = 24
}
if bottomMarginPadding == nil {
bottomMarginPadding = 0
}
}
public init(image: ImageViewModel, leftLabel: LabelModel, rightLabel: LabelModel) { public init(image: ImageViewModel, leftLabel: LabelModel, rightLabel: LabelModel) {
self.image = image self.image = image
self.leftLabel = leftLabel self.leftLabel = leftLabel
self.rightLabel = rightLabel self.rightLabel = rightLabel
super.init()
setDefaults()
} }
private enum CodingKeys: String, CodingKey { private enum CodingKeys: String, CodingKey {
@ -40,6 +47,8 @@ public class LeftVariableIconRightCaretListModel: MoleculeModelProtocol {
case leftLabel case leftLabel
case rightLabel case rightLabel
case image case image
case action
case hideArrow
} }
required public init(from decoder: Decoder) throws { required public init(from decoder: Decoder) throws {
@ -47,16 +56,22 @@ public class LeftVariableIconRightCaretListModel: MoleculeModelProtocol {
leftLabel = try typeContainer.decode(LabelModel.self, forKey: .leftLabel) leftLabel = try typeContainer.decode(LabelModel.self, forKey: .leftLabel)
rightLabel = try typeContainer.decode(LabelModel.self, forKey: .rightLabel) rightLabel = try typeContainer.decode(LabelModel.self, forKey: .rightLabel)
image = try typeContainer.decode(ImageViewModel.self, forKey: .image) image = try typeContainer.decode(ImageViewModel.self, forKey: .image)
action = try typeContainer.decodeModelIfPresent(codingKey: .action, typeCodingKey: ActionCodingKey.actionType)
hideArrow = try typeContainer.decodeIfPresent(Bool.self, forKey: .hideArrow)
try super.init(from: decoder)
setDefaults()
} }
public override func encode(to encoder: Encoder) throws {
public func encode(to encoder: Encoder) throws { try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self) var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(LeftVariableIconRightCaretListModel.identifier, forKey: .moleculeName) try container.encode(LeftVariableIconRightCaretListModel.identifier, forKey: .moleculeName)
try container.encode(leftLabel, forKey: .leftLabel) try container.encode(leftLabel, forKey: .leftLabel)
try container.encode(rightLabel, forKey: .rightLabel) try container.encode(rightLabel, forKey: .rightLabel)
try container.encodeIfPresent(image, forKey: .image) try container.encode(image, forKey: .image)
try container.encodeModelIfPresent(action, forKey: .action)
try container.encodeIfPresent(hideArrow, forKey: .hideArrow)
} }
} }