Quantcast
Channel: Active questions tagged uipickerview - Stack Overflow
Viewing all articles
Browse latest Browse all 592

How can I save several UISwitches and thus display different arrays of a Pickerview?

$
0
0

I am in the process of programming a small app to calculate exposure times.

I have a UiViewController to set the apertures of one Stop, halfStop and thridStop via three UiSwitches.

If you set one UiSwitch to .isON == true, the other two switch to .isOn == false.This also works perfectly.

I also have a button that can be used to return to the previous ViewController.UiSwitch states should be saved with a tap on this button.

If one of the switches is selected, the corresponding array should be displayed in the PickerView.

This works perfectly with a single array, but I can't manage with several.

And that's the problem, I've read a lot here and tried a lot, but it just doesn't work.

Here is the codes as I have written it so far:

ApertureModel:

class ApertureModel {    var aperture: String    var f: Double    init(_aperture: String, _f: Double) {        self.aperture = _aperture        self.f = _f    }}

Aperture Data

import Foundationclass ApertureData {    class func DataOneStop() -> [ApertureModel] {        var dataAperture = [ApertureModel]()        dataAperture.append(ApertureModel(_aperture: "f:0.5", _f: 0.5))        dataAperture.append(ApertureModel(_aperture: "f:0.7", _f: 0.7))        dataAperture.append(ApertureModel(_aperture: "f:1.0", _f: 1.0))        dataAperture.append(ApertureModel(_aperture: "f:1.1", _f: 1.1))        dataAperture.append(ApertureModel(_aperture: "f:1.2", _f: 1.2))        dataAperture.append(ApertureModel(_aperture: "f:1.4", _f: 1.4))        dataAperture.append(ApertureModel(_aperture: "f:1.6", _f: 1.6))        dataAperture.append(ApertureModel(_aperture: "f:1.8", _f: 1.8))        dataAperture.append(ApertureModel(_aperture: "f:2.0", _f: 2.0))        dataAperture.append(ApertureModel(_aperture: "f:2.2", _f: 2.2))        dataAperture.append(ApertureModel(_aperture: "f:2.5", _f: 2.5))        dataAperture.append(ApertureModel(_aperture: "f:2.8", _f: 2.8))        dataAperture.append(ApertureModel(_aperture: "f:3.2", _f: 3.2))        dataAperture.append(ApertureModel(_aperture: "f:4.0", _f: 4.0))        dataAperture.append(ApertureModel(_aperture: "f:4.5", _f: 4.5))        dataAperture.append(ApertureModel(_aperture: "f:5.0", _f: 5.0))        dataAperture.append(ApertureModel(_aperture: "f:5.6", _f: 5.6))        dataAperture.append(ApertureModel(_aperture: "f:6.3", _f: 6.3))        dataAperture.append(ApertureModel(_aperture: "f:7.2", _f: 7.2))        dataAperture.append(ApertureModel(_aperture: "f:8.0", _f: 8.0))        dataAperture.append(ApertureModel(_aperture: "f:9.0", _f: 9.0))        dataAperture.append(ApertureModel(_aperture: "f:10", _f: 10.0))        dataAperture.append(ApertureModel(_aperture: "f:11", _f: 11.0))        dataAperture.append(ApertureModel(_aperture: "f:13", _f: 13.0))        dataAperture.append(ApertureModel(_aperture: "f:14", _f: 14.0))        dataAperture.append(ApertureModel(_aperture: "f:16", _f: 16.0))        dataAperture.append(ApertureModel(_aperture: "f:18", _f: 18.0))        dataAperture.append(ApertureModel(_aperture: "f:20", _f: 20.0))        dataAperture.append(ApertureModel(_aperture: "f:22", _f: 22.0))        dataAperture.append(ApertureModel(_aperture: "f:25", _f: 22.0))        dataAperture.append(ApertureModel(_aperture: "f:29", _f: 29.0))        dataAperture.append(ApertureModel(_aperture: "f:32", _f: 32.0))        dataAperture.append(ApertureModel(_aperture: "f:36", _f: 36.0))        dataAperture.append(ApertureModel(_aperture: "f:40", _f: 40.0))        dataAperture.append(ApertureModel(_aperture: "f:45", _f: 45.0))        dataAperture.append(ApertureModel(_aperture: "f:64", _f: 64.0))        dataAperture.append(ApertureModel(_aperture: "f:90", _f: 90.0))        dataAperture.append(ApertureModel(_aperture: "f:128", _f: 128.0))        dataAperture.append(ApertureModel(_aperture: "f:256", _f: 256.0))        dataAperture.append(ApertureModel(_aperture: "f:512", _f: 512.0))        dataAperture.append(ApertureModel(_aperture: "f:1024", _f: 1024.0))        return dataAperture    }    class func DataHalfStop() -> [ApertureModel] {        var dataAperture = [ApertureModel]()        dataAperture.append(ApertureModel(_aperture: "f/1.0", _f: 1.0))        dataAperture.append(ApertureModel(_aperture: "f/1.2", _f: 1.2))        dataAperture.append(ApertureModel(_aperture: "f/1.4", _f: 1.4))        dataAperture.append(ApertureModel(_aperture: "f/1.7", _f: 1.7))        dataAperture.append(ApertureModel(_aperture: "f/2.0", _f: 2.0))        dataAperture.append(ApertureModel(_aperture: "f/2.4", _f: 2.4))        dataAperture.append(ApertureModel(_aperture: "f/2.8", _f: 2.8))        dataAperture.append(ApertureModel(_aperture: "f/3.3", _f: 3.3))        dataAperture.append(ApertureModel(_aperture: "f/4.0", _f: 4.0))        dataAperture.append(ApertureModel(_aperture: "f/4.8", _f: 4.8))        dataAperture.append(ApertureModel(_aperture: "f/5.6", _f: 5.6))        dataAperture.append(ApertureModel(_aperture: "f/6.7", _f: 6.7))        dataAperture.append(ApertureModel(_aperture: "f/8.0", _f: 8.0))        dataAperture.append(ApertureModel(_aperture: "f/9.5", _f: 9.5))        dataAperture.append(ApertureModel(_aperture: "f/10", _f: 10.0))        dataAperture.append(ApertureModel(_aperture: "f/11", _f: 11.0))        dataAperture.append(ApertureModel(_aperture: "f/14", _f: 14.0))        dataAperture.append(ApertureModel(_aperture: "f/16", _f: 16.0))        dataAperture.append(ApertureModel(_aperture: "f/19", _f: 19.0))        dataAperture.append(ApertureModel(_aperture: "f/22", _f: 22.0))        dataAperture.append(ApertureModel(_aperture: "f/27", _f: 27.0))        dataAperture.append(ApertureModel(_aperture: "f/32", _f: 32.0))        dataAperture.append(ApertureModel(_aperture: "f/38", _f: 38.0))        dataAperture.append(ApertureModel(_aperture: "f/45", _f: 45.0))        dataAperture.append(ApertureModel(_aperture: "f/54", _f: 54.0))        dataAperture.append(ApertureModel(_aperture: "f/64", _f: 64.0))        dataAperture.append(ApertureModel(_aperture: "f/76", _f: 76.0))        dataAperture.append(ApertureModel(_aperture: "f/107", _f: 107.0))        dataAperture.append(ApertureModel(_aperture: "f/128", _f: 128.0))        dataAperture.append(ApertureModel(_aperture: "f/215", _f: 215.0))        dataAperture.append(ApertureModel(_aperture: "f/256", _f: 253.0))        dataAperture.append(ApertureModel(_aperture: "f/430", _f: 430.0))        dataAperture.append(ApertureModel(_aperture: "f/512", _f: 512.0))        dataAperture.append(ApertureModel(_aperture: "f/860", _f: 860.0))        dataAperture.append(ApertureModel(_aperture: "f/1024", _f: 1024.0))        return dataAperture    }    class func DataThirdStop() -> [ApertureModel] {        var dataAperture = [ApertureModel]()        dataAperture.append(ApertureModel(_aperture: "f/1.0", _f: 1.0))        dataAperture.append(ApertureModel(_aperture: "f/1.4", _f: 1.4))        dataAperture.append(ApertureModel(_aperture: "f/2.0", _f: 2.0))        dataAperture.append(ApertureModel(_aperture: "f/2.8", _f: 2.8))        dataAperture.append(ApertureModel(_aperture: "f/4.0", _f: 4.0))        dataAperture.append(ApertureModel(_aperture: "f/5.6", _f: 5.6))        dataAperture.append(ApertureModel(_aperture: "f/8.0", _f: 8.0))        dataAperture.append(ApertureModel(_aperture: "f/11", _f: 11.0))        dataAperture.append(ApertureModel(_aperture: "f/16", _f: 16.0))        dataAperture.append(ApertureModel(_aperture: "f/22", _f: 22.0))        dataAperture.append(ApertureModel(_aperture: "f/32", _f: 32.0))        dataAperture.append(ApertureModel(_aperture: "f/45", _f: 45.0))        dataAperture.append(ApertureModel(_aperture: "f/64", _f: 64.0))        dataAperture.append(ApertureModel(_aperture: "f/90", _f: 90.0))        dataAperture.append(ApertureModel(_aperture: "f/128", _f: 128.0))        dataAperture.append(ApertureModel(_aperture: "f/256", _f: 256.0))        dataAperture.append(ApertureModel(_aperture: "f/512", _f: 512.0))        dataAperture.append(ApertureModel(_aperture: "f/1024", _f: 1024.0))        return dataAperture    }}

PickerView

import UIKitclass SelectAperture: UIViewController {    @IBOutlet weak var aperturePicker: UIPickerView!    var delegateAperture: apertureDelegate? = nil    var apertureModelThird = [ApertureModel]()    let defaults = UserDefaults.standard    //MARK: - Unwind     @IBAction func unwindAperture(_ sender: UIStoryboardSegue) {        dismiss(animated: true, completion: nil)    }    override func viewDidLoad() {        super.viewDidLoad()        aperturePicker.dataSource = self        aperturePicker.delegate = self        apertureModelThird = ApertureData.DataOneStop()        //MARK: - Notification        if let selectedRow = defaults.object(forKey: "saveAperturePicker") as? Int {            aperturePicker.selectRow(selectedRow, inComponent: 0, animated: true)        }        NotificationCenter.default.addObserver(self, selector: #selector(aperturePickerChanged), name: Notification.Name.pickersChanged, object: nil)    }        //MARK: - Func PickerChanced    @objc func aperturePickerChanged() {        let values = aperturePicker.selectedRow(inComponent: 0)        _ = apertureModelThird[values...values]    }}        //MARK: - PickerView Delegateextension SelectAperture: UIPickerViewDelegate {    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {        apertureModelThird[row].aperture    }    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {        NotificationCenter.default.post(name: Notification.Name.pickersChanged, object: self)        //MARK: - Speicherung der PickerRow        let rowDefaults = defaults        rowDefaults.set(row, forKey: "saveAperturePicker")    }    func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {        let pickerText = UILabel()        pickerText.textColor = UIColor.white        pickerText.text = apertureModelThird[row].aperture        pickerText.font = UIFont.boldSystemFont(ofSize: 20)        pickerText.textAlignment = NSTextAlignment.center        return pickerText    }    func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {        30    }}        //MARK: - PickerView DataSourceextension SelectAperture: UIPickerViewDataSource {    func numberOfComponents(in pickerView: UIPickerView) -> Int {        1    }    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {        apertureModelThird.count    }}        //MARK: - Extension Notificationextension Notification.Name {    static let pickersChanged = Notification.Name("PickerChanged")}//MARK: - Delegateprotocol apertureDelegate {func apertureValue(aperture: String)}

UISwitches

import UIKitclass SelectApertureStops: UIViewController {    @IBOutlet weak var oneStopSwitch: UISwitch!    @IBOutlet weak var halfStopSwitch: UISwitch!    @IBOutlet weak var thirdStopSwitch: UISwitch!    let switchDelfault = UserDefaults.standard    //MARK: - Unwind    @IBAction func unwindStops(_ sender: UIStoryboardSegue) {        dismiss(animated: true, completion: nil)    }    override func viewDidLoad() {        super.viewDidLoad()        oneStopSwitch.isOn = switchDelfault.bool(forKey: "switchStateOne")        halfStopSwitch.isOn = switchDelfault.bool(forKey: "switchStateHalf")        thirdStopSwitch.isOn = switchDelfault.bool(forKey: "switchStateThird")    }    @IBAction func oneStopSwitchChanged(_ sender: UISwitch) {        if (sender.isOn == true) {            halfStopSwitch.isOn = false            thirdStopSwitch.isOn = false        } else if sender.isOn == false && halfStopSwitch.isOn == false && thirdStopSwitch.isOn == false {            oneStopSwitch.isOn = true        }        switchDelfault.set(sender.isOn, forKey: "switchStateOne")    }    @IBAction func halfStopSwitchChanged(_ sender: UISwitch) {        if sender.isOn == true {            oneStopSwitch.isOn = false            thirdStopSwitch.isOn = false        } else if oneStopSwitch.isOn == false && halfStopSwitch.isOn == false && thirdStopSwitch.isOn == false {            halfStopSwitch.isOn = true        }        switchDelfault.set(sender.isOn, forKey: "switchStateHalf")    }    @IBAction func thirdStopSwitchChanged(_ sender: UISwitch) {        if sender.isOn == true {            oneStopSwitch.isOn = false            halfStopSwitch.isOn = false        } else if oneStopSwitch.isOn == false && halfStopSwitch.isOn == false && thirdStopSwitch.isOn == false {            thirdStopSwitch.isOn = true        }        switchDelfault.set(sender.isOn, forKey: "switchStateThird")    }}

I would be very happy if you could help me, because I just can't get any further.

I'm still a beginner in Swift5, I've learnt a lot in the meantime, but unfortunately I'm failing with this problem.


Viewing all articles
Browse latest Browse all 592

Trending Articles