У меня есть Segmented Control и PickerView на моем втором ViewController. Я использую Singleton (спасибо этому сообщению: How do you share data between view controllers and other objects in Swift?), и было легко сохранить значения Segmented Control (см. Код ниже), которые сохраняют выбранное сегментированное значение управления, а затем сбрасывают сегментированный элемент управления при загрузке. Однако я не могу понять, как сделать то же самое с PickerView, другими словами, я хочу взять выбранную строку, сохранить ее в моей переменной в моем Singleton, и когда пользователь вернется к моему 2-му ViewController, выбранная строка быть установленным там, где они остановились. Сложность в том, что строка, которая заполнит мой pickerview соответствует типу пользовательского:Как сохранить выбранную строку UIpickerView в переменную Singleton в Swift?
import Foundation
class TitleData {
struct mdCounty {
var name: String = ""
var countyRecordation: Double = 0
var countyTransfer: Double = 0
var countyDeduction: Double = 0
}
2 View Controller:
enter import UIKit
class settingsViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
let titleData = TitleData()
@IBOutlet weak var countyPicker: UIPickerView!
@IBOutlet weak var segmentedControl: UISegmentedControl!
override func viewDidLoad() {
super.viewDidLoad()
countyPicker.delegate = self
countyPicker.dataSource = self
segmentedControl.selectedSegmentIndex = Singleton.instance.segmentedControlChoice
}
override func viewDidAppear(animated: Bool) {
segmentedControl.selectedSegmentIndex = Singleton.instance.segmentedControlChoice
}
@IBAction func indexChanged(sender: UISegmentedControl) {
switch segmentedControl.selectedSegmentIndex
{
case 0:
Singleton.instance.priceMax = 500000
Singleton.instance.priceMin = 0
Singleton.instance.payoffMax = 500000
Singleton.instance.payoffMin = 0
Singleton.instance.segmentedControlChoice = 0
case 1:
Singleton.instance.priceMax = 1000000
Singleton.instance.priceMin = 500000
Singleton.instance.payoffMax = 1000000
Singleton.instance.payoffMin = 0
Singleton.instance.segmentedControlChoice = 1
case 2:
Singleton.instance.priceMax = 2000000
Singleton.instance.priceMin = 1000000
Singleton.instance.payoffMax = 2000000
Singleton.instance.payoffMin = 0
Singleton.instance.segmentedControlChoice = 2
case 3:
Singleton.instance.priceMax = 5000000
Singleton.instance.priceMin = 2000000
Singleton.instance.payoffMax = 5000000
Singleton.instance.payoffMin = 0
Singleton.instance.segmentedControlChoice = 3
default:
break
}
}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return titleData.mdCounties.count
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
Singleton.instance.selectedCounty = titleData.mdCounties[row].name
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
return titleData.mdCounties[row].name
}
Singleton Класс:
import Foundation
class Singleton {
static let instance = Singleton()
var priceMax: Float = 500000
var priceMin: Float = 0
var payoffMax: Float = 500000
var payoffMin: Float = 0
var segmentedControlChoice: Int = 0
var selectedCounty: String = "Allegany"
var pickerRowNumber: Int = 0
init() { }
}