diff --git a/MVMCoreUI/Atomic/Atoms/Buttons/RadioButtonSelectionHelper.swift b/MVMCoreUI/Atomic/Atoms/Buttons/RadioButtonSelectionHelper.swift index dbc3f7fe..2273785f 100644 --- a/MVMCoreUI/Atomic/Atoms/Buttons/RadioButtonSelectionHelper.swift +++ b/MVMCoreUI/Atomic/Atoms/Buttons/RadioButtonSelectionHelper.swift @@ -13,46 +13,50 @@ import UIKit public var fieldKey: String? public var groupName: String = FormValidator.defaultGroupName private var selectedRadioButton: RadioButton? - private var fieldGroupName: String? + private var selectedRadioButtonModel: RadioButtonModel? public var baseValue: AnyHashable? - init(_ radioButtonModel: RadioButtonModel?) { - self.fieldKey = radioButtonModel?.fieldKey - if radioButtonModel?.state ?? false { - self.baseValue = radioButtonModel?.formFieldValue() + public func set(_ radioButtonModel: RadioButtonModel, _ radioButton: RadioButton) { + self.fieldKey = radioButtonModel.fieldKey + if radioButtonModel.state { + if self.baseValue == nil { + self.baseValue = radioButtonModel.fieldValue + } + selectedRadioButtonModel = radioButtonModel + + // Below code is needed for cell resuse scenario. + radioButton.isSelected = true + selectedRadioButton = radioButton + } else { + radioButton.isSelected = false } } - + public static func setupForRadioButtonGroup(_ radioButtonModel: RadioButtonModel, _ radioButton: RadioButton, delegateObject: MVMCoreUIDelegateObject?) { guard let groupName = radioButtonModel.fieldKey, - let formValidator = delegateObject?.formHolderDelegate?.formValidator else { - return + let formValidator = delegateObject?.formHolderDelegate?.formValidator else { + return } - - let radioButtonSelectionHelper = formValidator.radioButtonsModelByGroup[groupName] ?? RadioButtonSelectionHelper(radioButtonModel) - radioButtonSelectionHelper.fieldGroupName = radioButtonModel.fieldKey - formValidator.radioButtonsModelByGroup[groupName] = radioButtonSelectionHelper - if radioButtonModel.state { - radioButtonSelectionHelper.selectedRadioButton = radioButton - } + let radioButtonSelectionHelper = formValidator.radioButtonsModelByGroup[groupName] ?? RadioButtonSelectionHelper() + radioButtonSelectionHelper.set(radioButtonModel, radioButton) + formValidator.radioButtonsModelByGroup[groupName] = radioButtonSelectionHelper FormValidator.setupValidation(for: radioButtonSelectionHelper, delegate: delegateObject?.formHolderDelegate) } public func selected(_ radioButton: RadioButton) { selectedRadioButton?.isSelected = false + selectedRadioButtonModel?.state = false selectedRadioButton = radioButton + selectedRadioButton?.isSelected = true + selectedRadioButtonModel = selectedRadioButton?.radioModel } } // MARK: - FormValidationFormFieldProtocol -extension RadioButtonSelectionHelper { - public func formFieldGroupName() -> String? { - return selectedRadioButton?.formFieldGroupName() ?? self.fieldGroupName - } - +extension RadioButtonSelectionHelper { public func formFieldValue() -> AnyHashable? { - return selectedRadioButton?.formFieldValue() + return selectedRadioButtonModel?.fieldValue } }