【发布时间】:2014-12-12 01:24:56
【问题描述】:
我目前有一个导航控制器,其中包含一个视图控制器和两个表视图控制器。当用户导航到第二个表格视图控制器时,他们可以按下“+”栏按钮项,该按钮项以模态方式呈现另一个表格视图,其中包含一个包含文本字段的静态单元格。用户可以输入文本并按“完成”保存。当我的委托方法被调用时,视图控制器被关闭,用户输入的字符串被附加到第二个视图控制器的数组中。然后,表格视图在表格单元格中显示用户输入的文本。该数组已通过prepareForSegue 方法向上传递到堆栈。这目前正在工作,因为我可以在表视图中看到在第一个视图控制器中实例化数组的字符串。
当用户向下导航到第二个表视图之前的任何视图控制器时,会出现我的问题,其中包含用户输入的字符串,显示在单元格中。显然,我已经成功地将数据传递给以前的视图控制器,但是经过大量研究和测试,我无法成功地使用户输入的字符串保持不变。当我导航到以前的视图控制器然后返回到第二个表视图时,用户输入的数据消失了,数组只包含初始数据。
我知道 Swift 中的数组是结构体,并且在向上传递堆栈时会复制这些值。当我导航到前一个视图控制器时,为什么用户输入的数据会消失,这是有道理的。之前的视图控制器实际上并不包含用户输入的数据。这是否意味着我需要将字符串附加到初始视图控制器中的数组而不是第二个表视图控制器中的数组?如果是这种情况,我不确定如何从第三个视图控制器访问初始视图控制器。
我访问过的所有文档和教程都是基于将数据从当前视图控制器传递回前一个视图控制器,这是一个委托,然后关闭接受输入的视图控制器。
如何将用户输入的字符串从最后一个视图控制器传递回初始视图控制器?
【问题讨论】:
-
视图控制器不应该知道父视图控制器存在。父母可以与孩子交谈,但孩子绝不能与父母交谈。如果孩子改变了一些东西,它会发送一个通知,而父母会从那里接受它。