Arrays 如果在swift中从一个视图控制器移动到另一个视图控制器,如何向数组动态添加值?

Arrays 如果在swift中从一个视图控制器移动到另一个视图控制器,如何向数组动态添加值?,arrays,swift,uitableview,Arrays,Swift,Uitableview,在Add_EditAddressViewController中,我需要在tableview中显示所有添加的地址,因为我在NewZoomAddressViewController中创建了一个数组,并将值附加到数组中,以在tableview中显示,但在表视图中始终只有一行因此,这里如何在不替换为add_EditAddressViewController中的oldvalue的情况下为数组动态添加值 class Add_EditAddressViewController: UIViewControlle

Add_EditAddressViewController
中,我需要在tableview中显示所有添加的地址,因为我在
NewZoomAddressViewController中创建了一个数组,并将值附加到数组中,以在tableview中显示,但在表视图中始终只有一行因此,这里如何在不替换为add_EditAddressViewController中的oldvalue的情况下为数组动态添加值

class Add_EditAddressViewController: UIViewController,DataEnteredDelegate {
@IBOutlet weak var addeditTableview: UITableView!
var addressArray = [String]()

var city: String?
var pincode: String?
var locality: String?

override func viewDidLoad() {
    super.viewDidLoad()
    addeditTableview.register(UINib(nibName: "EditAddressTableViewCell", bundle: nil), forCellReuseIdentifier: "EditAddressTableViewCell")
    print("zoooom valuew \(pincode)")
    addeditTableview.reloadData()
}

}
extension Add_EditAddressViewController : UITableViewDelegate,UITableViewDataSource {

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return addressArray.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell: EditAddressTableViewCell = tableView.dequeueReusableCell(withIdentifier: "EditAddressTableViewCell") as! EditAddressTableViewCell

    cell.editButton.addTarget(self, action: #selector(editbuttonClicked(sender:)), for: .touchUpInside)

        cell.nameHeader.text = "header"
        cell.addressLabel.text = addressArray[indexPath.row]

    return cell
}
}
导航是:

Add_EditAddressViewController: butnTap -> ProfileVC: btnTap -> NewZoomAddressViewController: btnTap -> Add_EditAddressViewController
这里每次当我来到NewZoomAddressViewController时,都需要将
\(self.sublocalityName!)\(localityName!)\(self.zipName!)
附加到addressArray以显示在Add\u EditAddressViewController的表视图中

注意:我在github中添加了与问题相关的代码:在profileVC中,您需要点击地图或继续按钮,然后它会导航到NewZoomAdressViewController

class Add_EditAddressViewController: UIViewController,DataEnteredDelegate {
@IBOutlet weak var addeditTableview: UITableView!
var addressArray = [String]()

var city: String?
var pincode: String?
var locality: String?

override func viewDidLoad() {
    super.viewDidLoad()
    addeditTableview.register(UINib(nibName: "EditAddressTableViewCell", bundle: nil), forCellReuseIdentifier: "EditAddressTableViewCell")
    print("zoooom valuew \(pincode)")
    addeditTableview.reloadData()
}

}
extension Add_EditAddressViewController : UITableViewDelegate,UITableViewDataSource {

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return addressArray.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell: EditAddressTableViewCell = tableView.dequeueReusableCell(withIdentifier: "EditAddressTableViewCell") as! EditAddressTableViewCell

    cell.editButton.addTarget(self, action: #selector(editbuttonClicked(sender:)), for: .touchUpInside)

        cell.nameHeader.text = "header"
        cell.addressLabel.text = addressArray[indexPath.row]

    return cell
}
}
新建ZoomAdressViewController代码:

class NewZoomAddressViewController: UIViewController {
weak var delegate: DataEnteredDelegate? = nil
var addressModel: ProfileModelUserAddress?
var addressArray = [String]()

var zipName: String?
var localityName: String?
var sublocalityName: String?

@IBOutlet weak var mapView: MKMapView!
@IBOutlet weak var addressLabel: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()
    print("in Zoom map VC")
    mapView.delegate = self
    addressLabel.text = "\(self.sublocalityName!) \(localityName!) \(self.zipName!)"

}

@IBAction func confirmBtn(_ sender: Any) {
    let viewController = storyboard?.instantiateViewController(withIdentifier: "Add_EditAddressViewController") as! Add_EditAddressViewController
    addressArray.append("\(sublocalityName ?? "") \(zipName ?? "") \(localityName ?? "")")
    viewController.addressArray = addressArray

    print("total address array all rows \(viewController.addressArray)")
    navigationController?.pushViewController(viewController, animated: true)
}

}

请尝试帮助在tableview中显示所有添加的地址。我被困在这里很久了。

您需要做的是在您的纵断面图中设置地址数组,并将其传递给其他控制器。。所以你的代码变成了

首先,您将在配置文件中使用如下数组

class ProfileAddressViewController: UIViewController, CLLocationManagerDelegate, UISearchBarDelegate, DataEnteredDelegate {
   var addressArray = [String]()
}
然后,当您调用
newzoomadressviewcontroller
时,您会像这样将该数组传递给他们

@objc func triggerTouchAction(_ sender: UITapGestureRecognizer) {
        print("Please Help!")

        let viewController = self.storyboard?.instantiateViewController(withIdentifier: "NewZoomAddressViewController") as! NewZoomAddressViewController
            viewController.delegate = self

        viewController.zipName = self.pincodeField.text
        viewController.sublocalityName = self.colonyField.text
        viewController.localityName = self.cityField.text
        viewController.addressArray = addressArray
            self.navigationController?.pushViewController(viewController, animated: true);
    }
在您的
中添加您调用profile的\u EditAddressViewController
。。将数组分配给配置文件

@objc func editbuttonClicked(sender: UIButton) {
        print("in button")
         let viewController = self.storyboard?.instantiateViewController(withIdentifier: "ProfileAddressViewController") as! ProfileAddressViewController
        viewController.addressArray = addressArray
        self.navigationController?.pushViewController(viewController, animated: true)
    }

新建ZoomAddressViewController中将确认按钮操作替换为

@IBAction func confirmBtn(_ sender: Any) {

    for controller in navigationController?.viewControllers ?? [] {
        if let listController =  controller as? Add_EditAddressViewController {
            let string = "\(sublocalityName ?? "") \(zipName ?? "") \(localityName ?? "")"
            listController.addressArray.append(string)
            navigationController?.popToViewController(controller, animated: true)
            return
        }
    }
}
添加\u EditAddressViewController中,将出现在视图上重新加载表格视图

override func viewWillAppear(_ animated: Bool) {
    self.navigationController?.navigationBar.isHidden=true
    addeditTableview.reloadData()
}

如何通过后退按钮从
Add_EditAddressViewController
添加到
NewZoomAddressViewController
?或者您编写了一些代码?@jawadAli
将_EditAddressViewController
添加到
profileViewcontroller
从这里添加到
新建ZoomAddressViewController
使用按钮推式ViewController每次启动新建
新建ZoomAddressViewController
。。。。这就是为什么阵列每年都会启动time@jawadAli,请更正,然后如何将所有值获取到表视图。。如果我做得不对。。带我到右边way@jawadAli请尝试将每次的答案添加到
addressArray
谢谢,这里也有新的值替换了TableView中的内容我需要将相同的
addressArray
发送到两个视图控制器Add_EditAddressViewController,和纵断面图控制器请告诉我如何在这些控制器中创建字符串类型的变量,即
var数组:[String]=[]
当您初始化Add_EditAddressViewControlle&ProfileViewController的对象时,从您当前的VC获取只需在推到导航之前传递此数组。我无法在
Add_EditAddressViewController中保存添加的数组
我将在github中共享代码。请您也解决这个问题,我正在谈论这个问题问题。。我将把你的问题标为正确答案