// // MoleculeTableViewCell.swift // MVMCoreUI // // Created by Scott Pfeil on 4/18/19. // Copyright © 2019 Verizon Wireless. All rights reserved. // import UIKit @objcMembers open class MoleculeTableViewCell: UITableViewCell, MVMCoreViewProtocol, MVMCoreUIMoleculeViewProtocol { var molecule: (UIView & MVMCoreUIMoleculeViewProtocol)? public override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) setupView() } public required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) setupView() } // For the accessory view convenience. var caretView: CaretView? private var caretViewWidthSizeObject: MFSizeObject? private var caretViewHeightSizeObject: MFSizeObject? public func updateView(_ size: CGFloat) { MFStyler.setDefaultMarginsFor(self, size: size) if #available(iOS 11.0, *) { contentView.directionalLayoutMargins = directionalLayoutMargins } else { contentView.layoutMargins = layoutMargins } if let molecule = molecule as? MVMCoreViewProtocol { molecule.updateView(size) } if let _ = accessoryView, let caretView = caretView, let widthObject = caretViewWidthSizeObject, let heightObject = caretViewHeightSizeObject { caretView.frame = CGRect(x: 0, y: 0, width: widthObject.getValueBased(onSize: size), height: heightObject.getValueBased(onSize: size)) } } public func setupView() { preservesSuperviewLayoutMargins = false contentView.preservesSuperviewLayoutMargins = false selectionStyle = .none } public func setWithJSON(_ json: [AnyHashable : Any]?, delegateObject: DelegateObject?, additionalData: [AnyHashable : Any]?) { guard let json = json else { return } if molecule == nil { if let moleculeView = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeForStack(withJSON: json, delegateObject: delegateObject) { contentView.addSubview(moleculeView) NSLayoutConstraint.activate(Array(NSLayoutConstraint.pinView(toSuperview: moleculeView, useMargins: moleculeView.needsToBeConstrained?() ?? false).values)) molecule = moleculeView } } else { molecule?.setWithJSON(json, delegateObject: delegateObject, additionalData: additionalData) } backgroundColor = molecule?.backgroundColor } // MARK- Convenience public func addCaretViewAccessory() { guard accessoryView == nil else { return } let width: CGFloat = 6 let height: CGFloat = 10 caretView = CaretView(lineThickness: CaretView.thin) caretView?.frame = CGRect(x: 0, y: 0, width: width, height: height) caretViewWidthSizeObject = MFSizeObject(scalingStandardSize: width) caretViewHeightSizeObject = MFSizeObject(scalingStandardSize: height) accessoryView = caretView } }