SegmentControll


#1

Всем привет! Помогите разобраться. У меня есть два экрана. Первый основной экран отображает информацию. Второй экран(настройки) меняет данные на главном экране.

Я хочу изменить единицу измерения у высоты и перехожу на экран настроек, и меняю единицу с (ft) на (m). Далее, я возвращаюсь на основной экран и вижу что все поменялось - все четко и классно. Далее, я хочу вернутся на экран настроек и вижу что сегмент у меня не сохранился! И переместился на единицу (ft).

Вопрос: как долбится сохранения положения сегмента при возврате(повторно) на экран настроек?

Код экрана настроек: -

import UIKit

class SettingsViewController: UIViewController {

@IBOutlet var segmentHeight: UISegmentedControl!
@IBOutlet var segmentDiametr: UISegmentedControl!
@IBOutlet var segmentMass: UISegmentedControl!
@IBOutlet var segmentLoad: UISegmentedControl!

var newArray: [ListRockets]!
var delegate: UpDataSettingsDelegate!
private var unitHeight = "ft"
private var unitDiameter = "ft"
private var unitWeight = "kg"
private var unitLoad = "lb"
private var number = 0

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

private func statesSegmentIndex() {
    segmentHeight.selectedSegmentIndex = 1
    segmentDiametr.selectedSegmentIndex = 1
    segmentLoad.selectedSegmentIndex = 1
}

private func add(_ index: Int, _ sender: UISegmentedControl) {
    switch sender.tag {
    case 1:
        unitHeight = segmentHeight.titleForSegment(at: sender.selectedSegmentIndex) ?? ""
        UserDefaults.standard.set(unitHeight, forKey: "unitHeight")
    case 2:
        unitDiameter = segmentDiametr.titleForSegment(at: sender.selectedSegmentIndex) ?? ""
        UserDefaults.standard.set(unitDiameter, forKey: "unitDiameter")
    case 3:
        unitWeight = segmentMass.titleForSegment(at: sender.selectedSegmentIndex) ?? ""
        UserDefaults.standard.set(unitWeight, forKey: "unitWeight")
    default:
        unitLoad = segmentLoad.titleForSegment(at: sender.selectedSegmentIndex) ?? ""
        UserDefaults.standard.set(unitLoad, forKey: "unitLoad")
    }
}

@IBAction func segmentAction(_ sender: UISegmentedControl) {
        add(number, sender)
}

@IBAction func cancelButton(_ sender: Any) {
    delegate.setSettingsUnits(unitHeight, unitDiameter, unitWeight, unitLoad)
    dismiss(animated: true, completion: nil)
}

}


#2

У вас при инициализации настроек нету проверки сохраненного значения в UserDefaults.