我不确定我是否正确设置了这个:您可以在计算器视图控制器和设置视图控制器之间导航,然后使用导航栏返回,但是......在设置选择器或分段控件时,数据不是' t通过以下代码传回计算器视图控制器。我想这是因为我的故事板上没有相应的segue指向计算器视图控制器。我会这样做,但为什么后台按钮不会在故事板上显示设置视图控制器?如果它,我可以控制拖回计算器视图控制器?我肯定错过了什么?
此外,我不仅希望选择器/分段控制数据被使用一次,即我不想在用户返回设置视图控制器时重置,我希望只要应用程序打开就保存这些选项。我怎么做?
我能找到的唯一其他现有答案是在Objective C
中代码:
class settingsViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
let titleData = TitleData()
var selectedCounty = String?("Allegany")
var priceMax = Float(1000000)
var priceMin = Float(0)
var payoffMax = Float(1000000)
var payoffMin = Float(0)
@IBOutlet weak var countyPicker: UIPickerView!
@IBOutlet weak var segmentedControl: UISegmentedControl!
override func viewDidLoad() {
super.viewDidLoad()
countyPicker.delegate = self
countyPicker.dataSource = self
}
@IBAction func indexChanged(sender: UISegmentedControl) {
switch segmentedControl.selectedSegmentIndex
{
case 0:
priceMax = 500000.0
priceMin = 0.0
case 1:
priceMax = 1000000.0
priceMin = 500000.0
case 2:
priceMax = 2000000.0
priceMin = 1000000.0
case 3:
priceMax = 5000000.0
priceMin = 2000000.0
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) {
selectedCounty = titleData.mdCounties[row].name
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
return titleData.mdCounties[row].name!
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var destViewController: FirstViewController = segue.destinationViewController as! FirstViewController
destViewController.selectedCounty = selectedCounty
destViewController.newPriceMax = priceMax
destViewController.newPriceMin = priceMin
destViewController.newPayoffMax = payoffMax
destViewController.newPayoffMin = payoffMin
}
}
答案 0 :(得分:1)
这是关于堆栈溢出的FAQ。它可以概括为“如何在ViewControllers之间传递数据”。它并不特定于Swift。这些技术在Objective-C和swift中是相同的。唯一改变的是你用来实现它的语言。
最全面,最灵活的方法是创建一个保存应用状态的数据容器单例。设置单例以将应用程序状态保存到文件(用户默认值,或应用程序文档目录中的文件。
每当您想要保存应用数据时,请将其保存到单身人士。只要您想阅读应用数据,请从单身人士处阅读。
如果您有一个更具体的情况,您希望在一个视图控制器和另一个视图控制器之间传递数据,则可以将数据对象传递到prepareForSegue中的目标视图控制器。然后,您可以在第二个视图控制器中更改数据对象,当您从segue返回时,数据将在数据对象中更改。