ios - 将两个变量传递给同一个 View Controller swift

标签 ios swift uitableview segue

我想将两个不同的数据从两个不同的 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/

相关文章:

ios - 如何在TableView中显示两个自定义单元格?

ios - 执行获取请求时应用程序卡住

ios - glGetRenderbufferParameterivOES 返回错误的大小

arrays - unshare() 和 copy() 有什么区别?

objective-c - iOS静态 TableView 不那么静态

ios - 带 Tableview 的辅助触摸 Laggy

ios - 设置 Spotify API 时,无法将类型 'ViewController' 的值分配给类型 'SPTAudioStreamingDelegate!'

ios - 将图像传递给另一个 View Controller

swift - 无法在结构方法中分配属性

ios - UIView animateWithDuration 在动画 block 之外为自动布局 View 设置动画