添加的Tableview数据不存在,为什么在swift中?
我正在将数据从第三个视图控制器发送到第一个视图控制器,现在是第一次将数据添加到tableview,但是如果从第一个视图控制器发送到另一个视图控制器,然后我返回到第一个视图控制器,那么表视图中添加的数据会出现为什么 在第三视图中,控制器向第一视图控制器表视图发送数据,如下所示:添加的Tableview数据不存在,为什么在swift中?,swift,uitableview,uinavigationcontroller,Swift,Uitableview,Uinavigationcontroller,我正在将数据从第三个视图控制器发送到第一个视图控制器,现在是第一次将数据添加到tableview,但是如果从第一个视图控制器发送到另一个视图控制器,然后我返回到第一个视图控制器,那么表视图中添加的数据会出现为什么 在第三视图中,控制器向第一视图控制器表视图发送数据,如下所示: var viewController: UIViewController? @IBAction func confirmBtn(_ sender: Any) { for controller in navigati
var viewController: UIViewController?
@IBAction func confirmBtn(_ sender: Any) {
for controller in navigationController?.viewControllers ?? [] {
if let listController = controller as? ProfileViewController {
guard let string = addressLabel.text else { return }//"\(sublocalityName ?? "") \(zipName ?? "") \(localityName ?? "")"
listController.addressArray.append(string)
navigationController?.popToViewController(controller, animated: true)
return
}
}
}
@IBOutlet weak var addeditTableview: UITableView!
var addressArray = [String]()
override func viewWillAppear(_ animated: Bool) {
self.navigationController?.navigationBar.isHidden=true
addeditTableview.reloadData()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return addressArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// let cell: EditAddressTableViewCell = addeditTableview.dequeueReusableCell(withIdentifier: "EditAddressTableViewCell") as! EditAddressTableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "EditAddressTableViewCell", for: indexPath) as! EditAddressTableViewCell
cell.editButton.addTarget(self, action: #selector(editbuttonClicked(sender:)), for: .touchUpInside)
cell.nameHeader.text = "Other"
cell.addressLabel.text = addressArray[indexPath.row]//"\(city) \(pincode) \(locality)"
return cell
}
在第一视图中,控制器向tableview添加数据,如下所示:
var viewController: UIViewController?
@IBAction func confirmBtn(_ sender: Any) {
for controller in navigationController?.viewControllers ?? [] {
if let listController = controller as? ProfileViewController {
guard let string = addressLabel.text else { return }//"\(sublocalityName ?? "") \(zipName ?? "") \(localityName ?? "")"
listController.addressArray.append(string)
navigationController?.popToViewController(controller, animated: true)
return
}
}
}
@IBOutlet weak var addeditTableview: UITableView!
var addressArray = [String]()
override func viewWillAppear(_ animated: Bool) {
self.navigationController?.navigationBar.isHidden=true
addeditTableview.reloadData()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return addressArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// let cell: EditAddressTableViewCell = addeditTableview.dequeueReusableCell(withIdentifier: "EditAddressTableViewCell") as! EditAddressTableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "EditAddressTableViewCell", for: indexPath) as! EditAddressTableViewCell
cell.editButton.addTarget(self, action: #selector(editbuttonClicked(sender:)), for: .touchUpInside)
cell.nameHeader.text = "Other"
cell.addressLabel.text = addressArray[indexPath.row]//"\(city) \(pincode) \(locality)"
return cell
}
添加表视图后,如果我转到其他视图控制器,并且如果我返回到表视图,那么附加值不会出现,为什么?
请在代码方面提供帮助。我建议使用“展开”序列,而不是遍历所有ViewController来查找包含表视图的VC并通过该引用传递数据 有关如何实施展开分段的更多信息,请查看此链接:
查看此stackoverflow答案以获取更多帮助:我建议使用“展开”序列,而不是遍历所有ViewController来查找包含表视图的VC并通过该引用传递数据 有关如何实施展开分段的更多信息,请查看此链接:
查看此stackoverflow答案以获取更多帮助:因为您的
var addressArray=[String]()
始终为空,直到您单击@IBAction func confirbtn(uu-sender:Any){…}
此函数在第三个视图上并弹出到第一个视图
每次转到firstviewcontroller时(除了第三个按钮的操作)addressArray
变量将为空
您可以使用
global
array来修复它,或者创建一个结构并向结构的数组属性添加值。因为您的var-addressArray=[String]()
始终为空,直到您在第三个视图中单击@iAction-func-confirmtn(sender:Any){…}/code>此函数并弹出到第一个视图
每次转到firstviewcontroller时(除了第三个按钮的操作)addressArray
变量将为空
您可以使用global
array来修复它,或者创建一个结构并向结构的数组属性添加值。声明一个全局变量,而不是所有这些
var addressArray : [String] = []
然后从任何视图控制器更新值,当您返回到第一个视图控制器时,在视图中将出现
重新加载您的表视图
override func viewWillAppear(_ animated: Bool) {
self.navigationController?.navigationBar.isHidden=true
addeditTableview.reloadData()
}
您的ThirdViewController
现在应该是这样的
@IBAction func confirmBtn(_ sender: Any) {
guard let string = addressLabel.text else { return }
addressArray.append(string)
navigationController?.popToViewController(controller, animated: true)
}
与其所有这些,不如声明一个全局变量
var addressArray : [String] = []
然后从任何视图控制器更新值,当您返回到第一个视图控制器时,在视图中将出现
重新加载您的表视图
override func viewWillAppear(_ animated: Bool) {
self.navigationController?.navigationBar.isHidden=true
addeditTableview.reloadData()
}
您的ThirdViewController
现在应该是这样的
@IBAction func confirmBtn(_ sender: Any) {
guard let string = addressLabel.text else { return }
addressArray.append(string)
navigationController?.popToViewController(controller, animated: true)
}
当您回来查看其他ViewController不是您的第三个控制器时,是否希望数据已经存在?当您回来查看其他ViewController不是您的第三个控制器时,是否希望数据已经存在?