separator
keys clean up
This commit is contained in:
parent
302a2f887f
commit
2d73f89fd4
@ -21,7 +21,7 @@ open class ThreeLayerTableViewController: MFProgrammaticTableViewController {
|
|||||||
private var topViewBottomConstraint: NSLayoutConstraint?
|
private var topViewBottomConstraint: NSLayoutConstraint?
|
||||||
private var bottomViewTopConstraint: NSLayoutConstraint?
|
private var bottomViewTopConstraint: NSLayoutConstraint?
|
||||||
|
|
||||||
//MARK:-MVMCoreViewProtocol
|
//MARK: - MVMCoreViewProtocol
|
||||||
open override func updateViews() {
|
open override func updateViews() {
|
||||||
super.updateViews()
|
super.updateViews()
|
||||||
let width = view.bounds.width
|
let width = view.bounds.width
|
||||||
@ -37,7 +37,7 @@ open class ThreeLayerTableViewController: MFProgrammaticTableViewController {
|
|||||||
self.tableView?.reloadData()
|
self.tableView?.reloadData()
|
||||||
}
|
}
|
||||||
|
|
||||||
//MARK:-MFViewController
|
//MARK: - MFViewController
|
||||||
open override func newDataBuildScreen() {
|
open override func newDataBuildScreen() {
|
||||||
super.newDataBuildScreen()
|
super.newDataBuildScreen()
|
||||||
createViewForTableHeader()
|
createViewForTableHeader()
|
||||||
@ -51,7 +51,7 @@ open class ThreeLayerTableViewController: MFProgrammaticTableViewController {
|
|||||||
// Do any additional setup after loading the view.
|
// Do any additional setup after loading the view.
|
||||||
}
|
}
|
||||||
|
|
||||||
//MARK:-Spacing
|
//MARK: - Spacing
|
||||||
// If both are subclassed to return a value, then the buttons will not be pinned towards the bottom because neither spacing would try to fill the screen.
|
// If both are subclassed to return a value, then the buttons will not be pinned towards the bottom because neither spacing would try to fill the screen.
|
||||||
/// Space between the top view and the table sections, nil to fill. 0 default
|
/// Space between the top view and the table sections, nil to fill. 0 default
|
||||||
open func spaceBelowTopView() -> CGFloat? {
|
open func spaceBelowTopView() -> CGFloat? {
|
||||||
@ -127,7 +127,7 @@ open class ThreeLayerTableViewController: MFProgrammaticTableViewController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//MARK:-Header Footer
|
//MARK: - Header Footer
|
||||||
/// Gets the top view and adds it to a spacing view, headerView, and then calls showHeader.
|
/// Gets the top view and adds it to a spacing view, headerView, and then calls showHeader.
|
||||||
open func createViewForTableHeader() {
|
open func createViewForTableHeader() {
|
||||||
let topView = viewForTop()
|
let topView = viewForTop()
|
||||||
@ -215,7 +215,7 @@ open class ThreeLayerTableViewController: MFProgrammaticTableViewController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//MARK:-Functions to subclass
|
//MARK: - Functions to subclass
|
||||||
/// Subclass for a top view.
|
/// Subclass for a top view.
|
||||||
open func viewForTop() -> UIView {
|
open func viewForTop() -> UIView {
|
||||||
let view = MVMCoreUICommonViewsUtility.commonView()
|
let view = MVMCoreUICommonViewsUtility.commonView()
|
||||||
@ -230,7 +230,7 @@ open class ThreeLayerTableViewController: MFProgrammaticTableViewController {
|
|||||||
return view
|
return view
|
||||||
}
|
}
|
||||||
|
|
||||||
//MARK:-Scrollview
|
//MARK: - Scrollview
|
||||||
open override func scrollViewDidScroll(_ scrollView: UIScrollView) {
|
open override func scrollViewDidScroll(_ scrollView: UIScrollView) {
|
||||||
// To stop handscroll animation if animating after scroll
|
// To stop handscroll animation if animating after scroll
|
||||||
stopHandScrollAnimation(true)
|
stopHandScrollAnimation(true)
|
||||||
@ -240,7 +240,7 @@ open class ThreeLayerTableViewController: MFProgrammaticTableViewController {
|
|||||||
tableView?.delegate = nil
|
tableView?.delegate = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
//MARK:-Animation
|
//MARK: - Animation
|
||||||
open override func setupIntroAnimations() {
|
open override func setupIntroAnimations() {
|
||||||
if let topView = topView, topView.subviews.count > 0 {
|
if let topView = topView, topView.subviews.count > 0 {
|
||||||
introAnimationManager?.addAnimation(animation: MVMAnimations.fadeUpAnimation(view: topView))
|
introAnimationManager?.addAnimation(animation: MVMAnimations.fadeUpAnimation(view: topView))
|
||||||
|
|||||||
@ -13,6 +13,7 @@ public class MoleculeStackView: MFView {
|
|||||||
var moleculesArray: [UIView]?
|
var moleculesArray: [UIView]?
|
||||||
var useMargins: Bool = false
|
var useMargins: Bool = false
|
||||||
|
|
||||||
|
// MARK: - Inits
|
||||||
public override init(frame: CGRect) {
|
public override init(frame: CGRect) {
|
||||||
super.init(frame: frame)
|
super.init(frame: frame)
|
||||||
}
|
}
|
||||||
@ -31,6 +32,7 @@ public class MoleculeStackView: MFView {
|
|||||||
fatalError("init(coder:) has not been implemented")
|
fatalError("init(coder:) has not been implemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: - MFViewProtocol
|
||||||
public override func setupView() {
|
public override func setupView() {
|
||||||
super.setupView()
|
super.setupView()
|
||||||
translatesAutoresizingMaskIntoConstraints = false
|
translatesAutoresizingMaskIntoConstraints = false
|
||||||
@ -48,9 +50,10 @@ public class MoleculeStackView: MFView {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: - MVMCoreUIMoleculeViewProtocol
|
||||||
open override func setWithJSON(_ json: [AnyHashable: Any]?, delegateObject: DelegateObject?, additionalData: [AnyHashable: Any]?) {
|
open override func setWithJSON(_ json: [AnyHashable: Any]?, delegateObject: DelegateObject?, additionalData: [AnyHashable: Any]?) {
|
||||||
super.setWithJSON(json, delegateObject: delegateObject, additionalData: additionalData)
|
super.setWithJSON(json, delegateObject: delegateObject, additionalData: additionalData)
|
||||||
guard let molecules = json?.arrayForKey("molecules") as? [[String: Any]] else {
|
guard let molecules = json?.arrayForKey(KeyMolecules) as? [[String: Any]] else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -9,8 +9,24 @@
|
|||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
@objcMembers open class MoleculeTableViewCell: UITableViewCell, MVMCoreViewProtocol, MVMCoreUIMoleculeViewProtocol {
|
@objcMembers open class MoleculeTableViewCell: UITableViewCell, MVMCoreViewProtocol, MVMCoreUIMoleculeViewProtocol {
|
||||||
var molecule: (UIView & MVMCoreUIMoleculeViewProtocol)?
|
open var molecule: (UIView & MVMCoreUIMoleculeViewProtocol)?
|
||||||
|
|
||||||
|
// For the accessory view convenience.
|
||||||
|
public var caretView: CaretView?
|
||||||
|
private var caretViewWidthSizeObject: MFSizeObject?
|
||||||
|
private var caretViewHeightSizeObject: MFSizeObject?
|
||||||
|
|
||||||
|
// For separation between cells.
|
||||||
|
public var topSeparatorView: SeparatorView?
|
||||||
|
public var bottomSeparatorView: SeparatorView?
|
||||||
|
public enum SeparatorFrequency: String {
|
||||||
|
case All = "all"
|
||||||
|
case AllExceptTop = "allExceptTop"
|
||||||
|
case AllExceptBottom = "allExceptBottom"
|
||||||
|
case Between = "between"
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Inits
|
||||||
public override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
|
public override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
|
||||||
super.init(style: style, reuseIdentifier: reuseIdentifier)
|
super.init(style: style, reuseIdentifier: reuseIdentifier)
|
||||||
setupView()
|
setupView()
|
||||||
@ -21,17 +37,17 @@ import UIKit
|
|||||||
setupView()
|
setupView()
|
||||||
}
|
}
|
||||||
|
|
||||||
// For the accessory view convenience.
|
// MARK: - MFViewProtocol
|
||||||
var caretView: CaretView?
|
|
||||||
private var caretViewWidthSizeObject: MFSizeObject?
|
|
||||||
private var caretViewHeightSizeObject: MFSizeObject?
|
|
||||||
|
|
||||||
public func updateView(_ size: CGFloat) {
|
public func updateView(_ size: CGFloat) {
|
||||||
MFStyler.setDefaultMarginsFor(self, size: size)
|
MFStyler.setDefaultMarginsFor(self, size: size)
|
||||||
if #available(iOS 11.0, *) {
|
if #available(iOS 11.0, *) {
|
||||||
contentView.directionalLayoutMargins = directionalLayoutMargins
|
contentView.directionalLayoutMargins = directionalLayoutMargins
|
||||||
|
topSeparatorView?.setLeftAndRightPinConstant(directionalLayoutMargins.leading)
|
||||||
|
bottomSeparatorView?.setLeftAndRightPinConstant(directionalLayoutMargins.leading)
|
||||||
} else {
|
} else {
|
||||||
contentView.layoutMargins = layoutMargins
|
contentView.layoutMargins = layoutMargins
|
||||||
|
topSeparatorView?.setLeftAndRightPinConstant(layoutMargins.left)
|
||||||
|
bottomSeparatorView?.setLeftAndRightPinConstant(layoutMargins.left)
|
||||||
}
|
}
|
||||||
|
|
||||||
if let molecule = molecule as? MVMCoreViewProtocol {
|
if let molecule = molecule as? MVMCoreViewProtocol {
|
||||||
@ -40,6 +56,8 @@ import UIKit
|
|||||||
if let _ = accessoryView, let caretView = caretView, let widthObject = caretViewWidthSizeObject, let heightObject = caretViewHeightSizeObject {
|
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))
|
caretView.frame = CGRect(x: 0, y: 0, width: widthObject.getValueBased(onSize: size), height: heightObject.getValueBased(onSize: size))
|
||||||
}
|
}
|
||||||
|
topSeparatorView?.updateView(size)
|
||||||
|
bottomSeparatorView?.updateView(size)
|
||||||
}
|
}
|
||||||
|
|
||||||
public func setupView() {
|
public func setupView() {
|
||||||
@ -48,6 +66,7 @@ import UIKit
|
|||||||
selectionStyle = .none
|
selectionStyle = .none
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: - MVMCoreUIMoleculeViewProtocol
|
||||||
public func setWithJSON(_ json: [AnyHashable : Any]?, delegateObject: DelegateObject?, additionalData: [AnyHashable : Any]?) {
|
public func setWithJSON(_ json: [AnyHashable : Any]?, delegateObject: DelegateObject?, additionalData: [AnyHashable : Any]?) {
|
||||||
guard let json = json else {
|
guard let json = json else {
|
||||||
return
|
return
|
||||||
@ -64,7 +83,8 @@ import UIKit
|
|||||||
backgroundColor = molecule?.backgroundColor
|
backgroundColor = molecule?.backgroundColor
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK- Convenience
|
// MARK: - Convenience
|
||||||
|
/// Adds the standard mvm style caret to the accessory view
|
||||||
public func addCaretViewAccessory() {
|
public func addCaretViewAccessory() {
|
||||||
guard accessoryView == nil else {
|
guard accessoryView == nil else {
|
||||||
return
|
return
|
||||||
@ -77,4 +97,56 @@ import UIKit
|
|||||||
caretViewHeightSizeObject = MFSizeObject(scalingStandardSize: height)
|
caretViewHeightSizeObject = MFSizeObject(scalingStandardSize: height)
|
||||||
accessoryView = caretView
|
accessoryView = caretView
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func addSeparatorsIfNeeded() {
|
||||||
|
if topSeparatorView == nil {
|
||||||
|
topSeparatorView = SeparatorView.separatorAdd(to: self, position: SeparatorPositionTop)
|
||||||
|
topSeparatorView?.hide()
|
||||||
|
}
|
||||||
|
if bottomSeparatorView == nil {
|
||||||
|
bottomSeparatorView = SeparatorView.separatorAdd(to: self, position: SeparatorPositionBot)
|
||||||
|
bottomSeparatorView?.hide()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// For when the separator between cells shows using json and frequency.
|
||||||
|
public func setSeparatorWithJSON(_ json: [AnyHashable : Any]?, delegateObject: DelegateObject?, additionalData: [AnyHashable : Any]?, indexPath: IndexPath) {
|
||||||
|
guard let json = json else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
addSeparatorsIfNeeded()
|
||||||
|
topSeparatorView?.setWithJSON(json, delegateObject: delegateObject, additionalData: additionalData)
|
||||||
|
bottomSeparatorView?.setWithJSON(json, delegateObject: delegateObject, additionalData: additionalData)
|
||||||
|
if let separatorFrequencyString = json.optionalStringForKey("frequency"), let separatorFrequency = SeparatorFrequency(rawValue: separatorFrequencyString) {
|
||||||
|
setSeparatorFrequency(separatorFrequency, indexPath: indexPath)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// For when the separator between cells shows.
|
||||||
|
public func setSeparatorFrequency(_ separatorFrequency: SeparatorFrequency, indexPath: IndexPath) {
|
||||||
|
switch separatorFrequency {
|
||||||
|
case .All:
|
||||||
|
if indexPath.row == 0 {
|
||||||
|
topSeparatorView?.show()
|
||||||
|
} else {
|
||||||
|
topSeparatorView?.hide()
|
||||||
|
}
|
||||||
|
bottomSeparatorView?.show()
|
||||||
|
case .AllExceptBottom:
|
||||||
|
topSeparatorView?.show()
|
||||||
|
bottomSeparatorView?.hide()
|
||||||
|
case .Between:
|
||||||
|
if indexPath.row == 0 {
|
||||||
|
topSeparatorView?.hide()
|
||||||
|
} else {
|
||||||
|
topSeparatorView?.show()
|
||||||
|
}
|
||||||
|
bottomSeparatorView?.hide()
|
||||||
|
case .AllExceptTop:
|
||||||
|
fallthrough
|
||||||
|
default:
|
||||||
|
topSeparatorView?.hide()
|
||||||
|
bottomSeparatorView?.show()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -56,7 +56,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (nullable UIView <MVMCoreUIMoleculeViewProtocol>*)getMoleculeForJSON:(nonnull NSDictionary *)json delegateObject:(nullable DelegateObject *)delegateObject {
|
- (nullable UIView <MVMCoreUIMoleculeViewProtocol>*)getMoleculeForJSON:(nonnull NSDictionary *)json delegateObject:(nullable DelegateObject *)delegateObject {
|
||||||
NSString *moleculeName = [json string:@"moleculeName"];
|
NSString *moleculeName = [json string:KeyMoleculeName];
|
||||||
if (!moleculeName) {
|
if (!moleculeName) {
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
@ -67,7 +67,7 @@
|
|||||||
|
|
||||||
|
|
||||||
- (nullable UIView <MVMCoreUIMoleculeViewProtocol>*)getMoleculeForStackWithJSON:(nonnull NSDictionary *)json delegateObject:(nullable DelegateObject *)delegateObject {
|
- (nullable UIView <MVMCoreUIMoleculeViewProtocol>*)getMoleculeForStackWithJSON:(nonnull NSDictionary *)json delegateObject:(nullable DelegateObject *)delegateObject {
|
||||||
NSString *moleculeName = [json string:@"moleculeName"];
|
NSString *moleculeName = [json string:KeyMoleculeName];
|
||||||
if (!moleculeName) {
|
if (!moleculeName) {
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,58 +8,60 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
public class MoleculeListTemplate: ThreeLayerTableViewController {
|
open class MoleculeListTemplate: ThreeLayerTableViewController {
|
||||||
|
|
||||||
public override func registerWithTable() {
|
open override func registerWithTable() {
|
||||||
super.registerWithTable()
|
super.registerWithTable()
|
||||||
guard let molecules = loadObject?.pageJSON?.arrayForKey("molecules") else {
|
guard let molecules = loadObject?.pageJSON?.arrayForKey(KeyMolecules) else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
for case let molecule as Dictionary<AnyHashable, Any> in molecules {
|
for case let molecule as Dictionary<AnyHashable, Any> in molecules {
|
||||||
if let moleculeName = molecule.optionalStringForKey("moleculeName") {
|
if let moleculeName = molecule.optionalStringForKey(KeyMoleculeName) {
|
||||||
tableView?.register(MoleculeTableViewCell.self, forCellReuseIdentifier: moleculeName)
|
tableView?.register(MoleculeTableViewCell.self, forCellReuseIdentifier: moleculeName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override func viewForTop() -> UIView {
|
open override func viewForTop() -> UIView {
|
||||||
guard let moleculeJSON = loadObject?.pageJSON?.optionalDictionaryForKey("header"), let molecule = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeForStack(withJSON: moleculeJSON, delegateObject: delegateObject()) else {
|
guard let moleculeJSON = loadObject?.pageJSON?.optionalDictionaryForKey("header"), let molecule = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeForStack(withJSON: moleculeJSON, delegateObject: delegateObject()) else {
|
||||||
return super.viewForTop()
|
return super.viewForTop()
|
||||||
}
|
}
|
||||||
return molecule
|
return molecule
|
||||||
}
|
}
|
||||||
|
|
||||||
override public func viewForBottom() -> UIView {
|
override open func viewForBottom() -> UIView {
|
||||||
guard let moleculeJSON = loadObject?.pageJSON?.optionalDictionaryForKey("footer"), let molecule = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeForStack(withJSON: moleculeJSON, delegateObject: delegateObject()) else {
|
guard let moleculeJSON = loadObject?.pageJSON?.optionalDictionaryForKey("footer"), let molecule = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeForStack(withJSON: moleculeJSON, delegateObject: delegateObject()) else {
|
||||||
return viewForBottom()
|
return viewForBottom()
|
||||||
}
|
}
|
||||||
return molecule
|
return molecule
|
||||||
}
|
}
|
||||||
|
|
||||||
public override func newDataBuildScreen() {
|
open override func newDataBuildScreen() {
|
||||||
super.newDataBuildScreen()
|
super.newDataBuildScreen()
|
||||||
registerWithTable()
|
registerWithTable()
|
||||||
}
|
}
|
||||||
|
|
||||||
public override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
|
open override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
|
||||||
if let moleculeName = loadObject?.pageJSON?.stringOptionalWithChainOfKeysOrIndexes(["molecules",indexPath.row,"moleculeName"]), let theClass = MVMCoreUIMoleculeMappingObject.shared()?.moleculeMapping?[moleculeName] as? MVMCoreUIMoleculeViewProtocol.Type,
|
if let moleculeName = loadObject?.pageJSON?.stringOptionalWithChainOfKeysOrIndexes([KeyMolecules,indexPath.row,KeyMoleculeName]), let theClass = MVMCoreUIMoleculeMappingObject.shared()?.moleculeMapping?[moleculeName] as? MVMCoreUIMoleculeViewProtocol.Type,
|
||||||
let estimatedHeightForRow = theClass.estimatedHeightForRow {
|
let estimatedHeightForRow = theClass.estimatedHeightForRow {
|
||||||
return estimatedHeightForRow()
|
return estimatedHeightForRow()
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
open override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||||
return loadObject?.pageJSON?.arrayForKey("molecules").count ?? 0
|
return loadObject?.pageJSON?.arrayForKey(KeyMolecules).count ?? 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
open override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||||||
guard let molecule = loadObject?.pageJSON?.optionalDictionaryWithChainOfKeysOrIndexes(["molecules",indexPath.row]),
|
guard let molecule = loadObject?.pageJSON?.optionalDictionaryWithChainOfKeysOrIndexes([KeyMolecules,indexPath.row]),
|
||||||
let moleculeName = molecule.optionalStringForKey("moleculeName"),
|
let moleculeName = molecule.optionalStringForKey(KeyMoleculeName),
|
||||||
let cell = tableView.dequeueReusableCell(withIdentifier: moleculeName) as? MoleculeTableViewCell else {
|
let cell = tableView.dequeueReusableCell(withIdentifier: moleculeName) as? MoleculeTableViewCell else {
|
||||||
return UITableViewCell()
|
return UITableViewCell()
|
||||||
}
|
}
|
||||||
cell.setWithJSON(molecule, delegateObject: delegateObject(), additionalData: nil)
|
let delegate = delegateObject()
|
||||||
|
cell.setWithJSON(molecule, delegateObject: delegate, additionalData: nil)
|
||||||
|
cell.setSeparatorWithJSON(loadObject?.pageJSON?.optionalDictionaryForKey("separator"), delegateObject: delegate, additionalData: nil, indexPath: indexPath)
|
||||||
cell.updateView(tableView.bounds.width)
|
cell.updateView(tableView.bounds.width)
|
||||||
return cell
|
return cell
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,6 +13,9 @@
|
|||||||
|
|
||||||
extern NSString * const KeyScreenHeading;
|
extern NSString * const KeyScreenHeading;
|
||||||
|
|
||||||
|
extern NSString * const KeyMolecules;
|
||||||
|
extern NSString * const KeyMoleculeName;
|
||||||
|
|
||||||
extern NSString * const KeyDisableButton;
|
extern NSString * const KeyDisableButton;
|
||||||
|
|
||||||
extern NSString * const KeyValue;
|
extern NSString * const KeyValue;
|
||||||
|
|||||||
@ -12,6 +12,9 @@
|
|||||||
|
|
||||||
NSString * const KeyScreenHeading = @"screenHeading";
|
NSString * const KeyScreenHeading = @"screenHeading";
|
||||||
|
|
||||||
|
NSString * const KeyMolecules = @"molecules";
|
||||||
|
NSString * const KeyMoleculeName = @"moleculeName";
|
||||||
|
|
||||||
NSString * const KeyDisableButton = @"disableAction";
|
NSString * const KeyDisableButton = @"disableAction";
|
||||||
|
|
||||||
NSString * const KeyValue = @"value";
|
NSString * const KeyValue = @"value";
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user