2015-04-19 5 views
-1

У меня есть 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() { } 
} 

ответ

0

Я действительно усложнять его, все Мне нужно было просто назначить «ряд» переменной в Singleton:

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
     Singleton.instance.selectedCounty = titleData.mdCounties[row].name 
     Singleton.instance.pickerRowNumber = row 
} 

затем вызвать эту строку, чтобы загрузить в ViewDidLoad:

countyPicker.selectRow(Singleton.instance.pickerRowNumber, inComponent: 0, animated: true)