vendredi 7 août 2020

swift 5.2 delegate method not getting called

In FourthViewController, I have a slider, which has values ranging from 1 to 1000. The value that is set gets sent via the delegate to PatternViewController, where it should be used to do sth (I put the print for testing purposes).

I've worked with delegates before and it was all ok, checked the code multiple times and multiple answers here on stack, I can't seem to find the issue. Any help would be much appreciated

FourthViewController

import UIKit

class FourthViewController: UIViewController {

//MARK: Outlets

@IBOutlet var persistenceSlider: UISlider!
@IBOutlet var persistenceLabel: UILabel!
weak var delegate: FourthViewControllerDelegate?

//MARK: Stored Properties - Constants

let userDefaults = UserDefaults.standard
let keyName = "sliderValue"

//MARK: Initializer

override func viewDidLoad() {
    super.viewDidLoad()
    loadSliderValue()
    }

//MARK: Actions

@IBAction func handleValueChanged(_ sender: UISlider) {
    updateLabel()
    persistSliderValue(value: persistenceSlider.value, key: keyName)
    delegate?.valueChanged(value: persistenceSlider.value)
    }

//MARK: Methods

func updateLabel() {
    persistenceLabel.text = String(format: "%.2f", persistenceSlider.value)
    }

func persistSliderValue(value: Float, key: String) {
    userDefaults.set(value, forKey: key)
    }

func loadSliderValue() {
    let persistedValue = userDefaults.float(forKey: keyName)
    persistenceSlider.value = persistedValue
    updateLabel()
    }
}

protocol FourthViewControllerDelegate: class {
func valueChanged(value: Float)
}

PatternViewController

import UIKit

class PatternViewController: UIViewController, FourthViewControllerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        setUp()
    }

    func setUp() {
        if let tabBar = self.tabBarController, let viewController = tabBar.viewControllers, let fourthViewController = viewController[3] as? FourthViewController  {
            fourthViewController.delegate = self
        }
    }

    func valueChanged(value: Float) {
        print(value)
    }
}

Aucun commentaire:

Enregistrer un commentaire