在解除视图时传递数据

时间:2017-02-26 00:56:04

标签: ios swift xcode uitableview segue

我正在开发一个有两个不同视图的应用程序,它可以模态地呈现一个“settings”viewController,其中嵌入了一个tableView。要将数据从嵌入式tableView传递到前两个视图,我必须在每个视图转换中使用prepareForSegue(据我所知)。但是,当我进入“设置”视图并点击“完成”时,我想回到之前的视图。为了做到这一点,就我所知,人们不得不忽视这个观点。在解除视图时,我可以将数据从一个视图传递到另一个视图吗?如果没有,这将如何实现?

注意:请随意纠正我,我仍在开始应用程序开发,我说的一些事情可能完全错误。

2 个答案:

答案 0 :(得分:1)

有几种方法可以实现这一目标。

您可以将呈现的视图控制器中的展开segue 定义回到另一个视图控制器(通常是执行原始演示的VC)。展开segue可以从按钮触发,就像“常规”segue一样,由于它们是segv,它们会在解散VC中触发id。您可以使用它,就像您将数据推回去一样。放松细分记录在this tech note

或者,您可以将委派从显示的视图控制器设置为另一个VC。这种模式在iOS开发中被广泛使用,涉及几个步骤:

  • 为要符合的类定义协议(“SettingsDelegate”)。给它一个方法 - 类似于-prepareForSegue:。使该方法使用您想要传回的数据的参数。
  • 为您的设置控制器提供类型为settingsDidChange(_:)的弱delegate属性。首次展示该VC时,请将代理设置为演示者。
  • 使呈现VC符合委托协议,并根据需要实施更新方法。
  • 在显示的VC调用SettingsDelegate?中有完成按钮,传递新数据。呈现VC将接收此调用并在设置解除时更新。

第一次设置委派模式可能很棘手,但随着时间的推移变得更容易。它记录在案here

最后,您可以使用持久性数据存储来隐藏设置。用户默认设置是设置数据的一个很好的选项 - 它允许您以一种可在整个过程中访问的方式保存键/值对信息应用程序。阅读用户默认值here

要在用户默认值更改时更新,您可以让设置控制器在解除时发布通知。然后,您应用中的其他VC可以监听此通知并根据需要进行更新。

答案 1 :(得分:-2)

你对prepareForSegue是正确的,你不能在这里使用它,因为你需要使用dismiss来弹出导航堆栈的设置viewController。一个非常简单的解决方案是定义一个全局变量。全局变量只是一个存在于应用程序中任何类范围之上的变量。例如,在您的设置viewController文件中,您可以执行此操作。

var globalVariable: String
class Settings: ViewController{
    //view controller stuff
    didSelectRowAtIndexPath{
        globalVariable = "Information"
    }
}

然后,当您使用dismiss方法时,您之前的viewcontroller将能够以globalVariable的形式访问该变量。它不必是字符串,您不必在didSelectRowAtIndexpath中设置它,您可以随意使用它。