我想将两个不同的数据从两个不同的 View Controller (Table1VC - Table2VC)传递到一个膨胀(MainVC)..
我这样做了并且成功了..但问题是:
当我传递第一个数据时,这里没有问题 但问题是当我传递第二个数据时,第一个数据就消失了!!
这就是我到目前为止所做的:
表1VC:
import UIKit
class Table1ViewController: UIViewController , UITableViewDelegate , UITableViewDataSource{
@IBOutlet weak var tableview: UITableView!
var city = ["data1" , "data2" , "Data3"]
var passit = ""
override func viewDidLoad() {
super.viewDidLoad()
tableview.delegate = self
tableview.dataSource = self
self.navigationController?.navigationBar.tintColor = UIColor.orange
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return city.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell()
cell.textLabel?.text = city[indexPath.row]
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
passit = city[indexPath.row]
performSegue(withIdentifier: "showtable1", sender: city[indexPath.row])
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?){
let passData1 = segue.destination as! MainVC
passData1.passcity1 = passit
}
}
表2VC
import UIKit
class passVC: UIViewController , UITableViewDelegate , UITableViewDataSource{
@IBOutlet weak var tableView: UITableView!
var city2 = ["data1" , "data2" , "Data3"]
var passit = ""
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
self.navigationController?.navigationBar.tintColor = UIColor.orange
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return city2.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell()
cell.textLabel?.text = city2[indexPath.row]
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
passit = city2[indexPath.row]
performSegue(withIdentifier: "showtable2", sender: city2[indexPath.row])
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?){
let passData2 = segue.destination as! MainVC
passData2.passcity2 = passit
}
}
主VC
import UIKit
class MainVC: UIViewController {
@IBOutlet weak var passText1: UITextField!
@IBOutlet weak var passText2: UITextField!
var passcity1 = ""
var passcity2 = ""
override func viewDidLoad() {
super .viewDidLoad()
passText1.text = passcity1
passText2.text = passcity2
}
}
传递的数据将位于MainVC的文本字段中
最佳答案
这有点像 View 堆栈的基础知识和 View 问题的生命周期。 当您键入以下行时:
让 passData1 = segue.destination 为! MainVC
这意味着您想要创建 MainVC 的一个实例,并想要填充该对象的数据。
当您转到该 Controller 并返回主 Controller 时,您就丢失了具有第一个值的前一个对象。
示例:
来自VC1:
let passData1 = segue.destination as! MainVC
-> 表示告诉编译器为我创建一个对象名称“passData1”,在此之后对 passData1 进行的任何操作都将仅影响 passData1
来自 VC2:
let passData2 = segue.destination as! MainVC
-> 表示告诉编译器为我创建一个对象名称“passData2”,此后对 passData2 执行的任何操作都将仅影响 passData2。
总而言之,你的对象已经改变,因此对象之前的状态丢失了。当您第一次退出 MainVC 时,下次创建任何 MainVC 对象时,它就是 MainVC 的新副本。您需要设置 value1 和 value2。
如果您想保留 passData1 的值,则将所需的值保存在某处,并在传递 passData2 时获取这些值并传递完整的集合。
关于ios - 将两个变量传递给同一个 View Controller swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43969458/