[英]Passing data while dismissing a view
有几种方法可以完成此操作。
您可以定义从展示的视图控制器到另一个视图控制器(通常是执行原始演示的VC)的展开序列 。 可以通过类似于“常规” segue的按钮来触发放松segue,并且由于它们是segue,因此它们会在关闭的VC中触发-prepareForSegue:
您可以像使用其他方式那样将数据推送回去。 在本技术说明中记录了放松的时间。
或者,您可以设置从提供的视图控制器到另一个VC的委派 。 此模式已在iOS开发中广泛使用,涉及几个步骤:
settingsDidChange(_:)
。 使该方法接受您要传递回的数据的参数。 SettingsDelegate?
的弱delegate
属性SettingsDelegate?
。 首次演示该VC时,请将委托设置为演示者。 self.delegate.settingsDidChange(_:)
,传递新数据。 主讲的VC将获得此呼叫并在“设置”关闭时进行更新。 首次设置委托模式可能会很棘手,但是随着您的使用,它将变得更加容易。 它记录在这里 。
最后,您可以使用永久性数据存储来保存设置。UserDefaults是设置数据的不错选择–它使您可以通过整个应用程序访问的方式保留键/值对信息。 在此处阅读用户默认设置。
要在用户默认值更改时进行更新,您可以让“设置”控制器在关闭时发布通知。 然后,您应用中的其他VC可以侦听此通知并根据需要进行更新。
您对prepareForSegue
是正确的,您不能在这里使用它,因为您需要使用dismiss才能将Settings viewController
从导航堆栈中弹出。 一个非常简单的解决方案是定义一个全局变量。 全局变量只是存在于应用程序中任何类范围之外的变量。 例如,您可以在设置viewController
文件中执行此操作。
var globalVariable: String
class Settings: ViewController{
//view controller stuff
didSelectRowAtIndexPath{
globalVariable = "Information"
}
}
然后,当您使用dismiss方法时,您以前的viewcontroller将能够以globalVariable
访问该变量。 它不必是字符串,也不必在didSelectRowAtIndexpath
进行设置,可以根据需要使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.