如何为numberOfRowsInSection添加计数,以及如何在Swift的Tableview中显示所有添加的值

问题描述 投票:-1回答:2

我正在尝试将值从一个视图控制器-OtherViewController发送到另一个视图控制器-Add_EditAddressViewController。我正在将值发送到第二个视图控制器(addressArray)中的数组。

这里是第一个视图控制器:

class OtherViewController: UIViewController {

    ...

    @IBAction func confirmBtn(_ sender: Any) {
        let viewController = self.storyboard?.instantiateViewController(withIdentifier: "Add_EditAddressViewController") as! Add_EditAddressViewController;
        viewController.pincode = zipName
        viewController.city = sublocalityName
        viewController.locality = localityName

        navigationController?.pushViewController(viewController, animated: true);
    }
}

然后,我在下面将addressArray中的值添加到OtherViewController中,如下所示:

class Add_EditAddressViewController: UIViewController {
    var addressArray = [String]()
    var city: String?
    var pincode: String?
    var locality: String?

    override func viewDidLoad() {
        super.viewDidLoad()
        addressArray.append("\(city ?? "") \(pincode ?? "") \(locality ?? "")")
        addressEDITTableview.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.nameHeader.text = "header"
        cell.addressLabel.text = addressArray[indexPath.row]
        return cell
    }
}

但是,在表格视图中,我只能得到一行。第一次,单行是可以的,但是如果我添加另一个地址-该行将替换为新地址,而我将不再获得旧地址。如何在表格视图中显示所有添加的地址?

swift uitableview row
2个回答
0
投票

[addressArray每次您移回屏幕时都会被释放。您应该在Add_EditAddressViewController中声明它,然后仅在其中附加数据,然后将其发送到otherviewcontroller

  var addressArray : [String] = []

  @IBAction func confirmBtn(_ sender: Any) {

    let viewController = self.storyboard?.instantiateViewController(withIdentifier: "Add_EditAddressViewController") as! Add_EditAddressViewController;
    self.addressArray.append("\(sublocalityName ?? "") \(zipName ?? "") \(localityName ?? "")")
    vc.addressArray = self.addressArray
    self.navigationController?.pushViewController(viewController, animated: true);

}

然后在您的otherViewController中>

var addressArray : [String] = [] { 
    didSet { 
        self.tableView.reloadData()
    }
}
 override func viewDidLoad() {
    super.viewDidLoad()
  }

  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.nameHeader.text = "header"
    cell.addressLabel.text = addressArray[indexPath.row]
  return cell
 }
 }

0
投票

在功能范围之外初始化控制器,并继续向同一数组而不是新实例中添加新元素。方法如下:

© www.soinside.com 2019 - 2024. All rights reserved.