我试图将数据从UITableview
传递到另一个UITableview
,当我按下cell
时我成功传递了数据,但我无法将数据传回当我按下导航栏的后退按钮;我已经尝试过全局变量来解决这个问题,但由于我将这些变量的日期存储在数据库中,这给我带来了很多问题,因为它强制执行所有存储的提醒来保存相同的数据,我可以做一些技巧来解决这个问题,但我们都知道全局变量是不好的做法,并且不会OOP
确认MVC
,问题是如何使用{{1}传回数据功能;请注意,表视图是静态的而不是动态的。
如果您在询问我尝试传递的数据是星期几,例如选择星期五和星期六时,它会将真值发送回上一个视图,如果取消选择星期五和星期六,则会发送错误值回到上一个观点
那我怎么解决这个问题呢?
提前致谢
答案 0 :(得分:5)
你需要做四件事:
您应该拥有自定义协议,例如:
personajes
如你所见,我认为你想要发回两个数组,但你可以编辑它以发送你想要的任何数据和数据类型。
您的第一个视图控制器(或表视图控制器,因为表视图控制器只是视图控制器的子类)必须符合您的自定义协议,例如:
public protocol DataBackDelegate: class {
func savePreferences (preferencesRestaurantsArray : [Bool], preferencesCusinesArray : [Bool])
}
在第二个视图控制器中,您需要为该协议提供变量,例如:
class MainTableViewController: UITableViewController, DataBackDelegate
然后你抓住 back 动作并在其中调用你的自定义协议函数,例如:
weak var delegate: DataBackDelegate?
在第一个主控制器中,在触发第二个视图控制器的segue中,您应该将删除设置为self,例如:
self.delegate?.savePreferences(Preferences2ViewController.preferencesRestaurantsArray, preferencesCusinesArray: Preferences2ViewController.preferencesCusinesArray)
其中目的地是第二个视图控制器
答案 1 :(得分:1)
我没有实现tableviews,我只是告诉你这个概念。
VIEWCONTROLLER A(第一个UITableView):
import UIKit
class vc1: UIViewController {
//Just to store days and the selected state (at start they should be unselected I presume)
var selectedDays : [String : Bool] = [
"Monday":false,
"Tuesday":false,
"Wednesday":false,
"Thursday":false,
"Friday":false,
"Saturday":false,
"Sunday": false
]
override func viewDidLoad() {
super.viewDidLoad()
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
//set this current view controller to the other UIViewController which will be pushed (vc2)
//You will need it later when pass back data
let secondViewController = segue.destinationViewController as! vc2
secondViewController.previousVC = self
}
}
VIEWCONTROLLER B(你的第二个UITableView):
class vc2: UIViewController {
var previousVC : ViewController
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(true)
//Suppose that I selected the day of monday and the day thursday
//get the datasource from the previousVC UIViewController and set the correct selected days
previousVC.selectedDays["monday"] = true
previousVC.selectedDays["thursday"] = true
//Here your previousVC selectedDays dictionary variable contains now the new values
//So you can do all you want with it when you will come back on your previous viewcontroller
/*
var selectedDays : [String : Bool] = [
"Monday":true,
"Tuesday":false,
"Wednesday":false,
"Thursday":true,
"Friday":false,
"Saturday":false,
"Sunday": false
]
*/
}
}
这是你想要的吗?