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

时间:2016-05-26 22:30:38

标签: ios swift uitableview segue

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

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

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

提前致谢

2 个答案:

答案 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
     ]
     */
}

}

这是你想要的吗?