首页 > 解决方案 > 如果您快速从一个视图控制器移动到另一个视图控制器,如何动态地将值添加到数组中?

问题描述

我需要在Add_EditAddressViewControllertableview 中显示所有添加的地址,为此我创建了一个 ARRAY 并将值附加到数组中NewZoomAddressViewController以显示在 tableview 中,但我一直在 tableview 中获得单行.. 所以这里如何向数组添加值动态而不替换成 Add_EditAddressViewController 中的旧值

导航是:

Add_EditAddressViewController: butnTap -> ProfileVC: btnTap -> NewZoomAddressViewController: btnTap -> Add_EditAddressViewController

每次我来到 NewZoomAddressViewController 时都需要附加\(self.sublocalityName!) \(localityName!) \(self.zipName!)addressArray以显示在 Add_EditAddressViewController 的 tableview 中

注意:这里我在 github 中添加了与此问题相关的代码:https ://github.com/SwiftSamples/AddressBug 在 profileVC 中您需要点击地图或继续按钮,然后导航到 NewZoomAddressViewController

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
}
}

NewZoomAddressViewController 代码:

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)
}

}

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

标签: arraysswiftuitableview

解决方案


那么你需要做的是在你的个人资料视图中有地址数组并将它传递给其他控制器..所以你的代码变成了

首先,您将在配置文件中有这样的数组

class ProfileAddressViewController: UIViewController, CLLocationManagerDelegate, UISearchBarDelegate, DataEnteredDelegate {
   var addressArray = [String]()
}

然后当你打电话时,你NewZoomAddressViewController像这样将该数组传递给他们

@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);
    }

Add_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)
    }

推荐阅读