单击后退按钮时如何传递数据?

Use*_*ser 1 uitableview ios segue swift

我正在尝试将数据传递UITableview给另一个UITableview,当我按下时我成功传递数据cell但是当我按下导航栏的后退按钮时我无法传回数据; 我已经尝试过全局变量来解决这个问题,但由于我将这些变量的日期存储在数据库中,这给我带来了很多问题,因为它强制执行所有存储的提醒以保存相同的数据,我可以做一些技巧解决这个问题,但我们都知道全局变量是不好的做法而且OOP都不确认MVC,问题是如何使用Prepare for segue函数传回数据; 请注意,表视图是静态的而不是动态的.

如果你问的是我试图传递的数据是星期几,例如选择星期五和星期六时它会将真值发送回前一个视图,如果取消选择星期五和星期六,则会将错误值发送回上一个视图

那我怎么解决这个问题呢?

提前致谢

Wil*_*aan 6

你需要做四件事:

第一

您应该有自定义协议,例如:

public protocol DataBackDelegate: class {
    func savePreferences (preferencesRestaurantsArray : [Bool], preferencesCusinesArray : [Bool])
}
Run Code Online (Sandbox Code Playgroud)

如你所见,我认为你想要发回两个数组,但你可以编辑它以发送你想要的任何数据和数据类型.

第二

您的第一个视图控制器(或表视图控制器,因为表视图控制器只是视图控制器的子类)必须符合您的自定义协议,例如:

class MainTableViewController: UITableViewController, DataBackDelegate  
Run Code Online (Sandbox Code Playgroud)

第三

在第二个视图控制器中,您需要为该协议提供变量,例如:

 weak var delegate: DataBackDelegate?
Run Code Online (Sandbox Code Playgroud)

然后你抓住后面的动作,在里面你调用你的自定义协议功能,例如:

self.delegate?.savePreferences(Preferences2ViewController.preferencesRestaurantsArray, preferencesCusinesArray: Preferences2ViewController.preferencesCusinesArray)
Run Code Online (Sandbox Code Playgroud)

第四

在第一个主控制器中,在触发第二个视图控制器的segue中,您应该将删除设置为self,例如:

destination.dataBackDelegate = self
Run Code Online (Sandbox Code Playgroud)

其中destination是第二个视图控制器