mvm_core_ui/MVMCoreUI/Molecules/MoleculeTableViewCell.swift
2019-04-29 13:36:36 -04:00

81 lines
3.1 KiB
Swift

//
// 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
}
}