我遇到了问题。我正在使用swift创建一个应用程序,您可以通过主视图控制器上的按钮选择一个大陆。这会将您带到第二个视图控制器,在该视图控制器中,该大陆的国家及其人口将显示在文本视图中。稍后,您将使用文本字段从第三个视图控制器添加国家/地区和人口,然后将此信息添加回预览文本视图。将其添加到各自的大陆。
我在第一个视图控制器中有一个嵌套字典。当数据模型位于第一个视图上时,如何从第三个视图添加信息并在第二个视图上显示?
这是我的数据模型:
//you can access any session data by session name using this // default is a session name
$session_default = $this->session->userdata('default');
echo $session_default ; // english
我是新手,这就是我完全困惑的原因。
答案 0 :(得分:1)
这个例子在Swift 3中
根据我的理解,您需要在视图之间传递和改变数据集。
我提供了一种简单的方法,您可以在视图之间传递字典,您可以传递数据集,编辑它,并且您对数据集的更改将在您的数据集之间进行遍历视图。
定义一个协议,告诉您的视图控制器他们必须有一个类型为<?php
$string = "one two three four";
echo trim_text($string, 3);
?>
变量的字典。
[String: [String: Int]]
使处理数据的每个视图控制器都符合此协议。
protocol ViewPassesData : class {
var dictionary : [String: [String: Int]] { get set }
}
您需要将其添加到第一个视图控制器:
class FirstViewController : UIViewController, ViewPassesData { //...}
class SecondViewController : UIViewController, ViewPassesData { //...}
class ThirdViewController : UIViewController, ViewPassesData { //...}
这是为了查看控制器2&amp; 3
var dictionary : [String: [String: Int]] = [
"North America" : ["country1" : 0, "country2" : 0, "country3" : 0],
"Asia" : ["country1" : 0, "country2" : 0, "country3" : 0],
"South America" : ["country1" : 0, "country2" : 0, "country3" : 0],
"Africa" : ["country1" : 0, "country2" : 0, "country3" : 0],
"Europe" : ["country1" : 0, "country2" : 0, "country3" : 0],
"Oceania" : ["country1" : 0, "country2" : 0, "country3" : 0]
]
现在您已经在视图控制器之间定义了一个公共接口,并且您已经告诉您的视图控制器,他们必须必须遵循这种共性,您只需将此准备粘贴到segue功能进入每个视图控制器。请注意,我们将视图控制器转换为协议类型。由于我们的每个视图控制器都遵循我们的协议,因此演员应该完全正常,我们应该能够访问我们正在投射到的控制器中的字典。
var dictionary : [String: [String: Int]] = [:]
要测试我刚刚向您展示的内容,请在每个视图中向viewDidLoad添加一个print语句:
override func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) {
guard let vc = segue.destinationViewController as? ViewPassesData
else { fatalError("wrong vc type") }
vc.dictionary = self.dictionary
}
您会看到您的数据集正在您的观看次数之间传输。您将能够更新您的数据集并将其传递到下一个视图。