【问题标题】:Added Tableview data is not coming, why in swift?添加的 Tableview 数据没有来,为什么要快速添加?
【发布时间】:2020-06-08 09:42:16
【问题描述】:

我正在从第三个视图控制器向第一个视图控制器发送数据到 tableview,现在第一次将数据添加到 tableview 但是如果从第一个视图控制器转到另一个视图控制器并且我回到第一个视图控制器然后添加表格视图中的数据来了为什么?

在第 3 个视图控制器中将数据发送到第 1 个视图控制器表视图,如下所示:

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

在第一个视图控制器中向 tableview 添加数据,如下所示:

 @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 而不是你的第三个 Controller 回来时,你是否希望已经存在的数据在那里?

标签: swift uitableview uinavigationcontroller


【解决方案1】:

我建议不要遍历所有的 ViewController 来找到包含表视图的 VC 并通过该引用传回数据,我建议使用 unwind segue。

查看此链接以获取有关如何实现展开转场的更多信息: https://developer.apple.com/documentation/uikit/resource_management/dismissing_a_view_controller_with_an_unwind_segue

查看这个 stackoverflow 答案以获得更多帮助:Passing data with unwind segue

【讨论】:

    【解决方案2】:

    因为您的var addressArray = [String]() 始终为空,直到您在第三个视图上单击@IBAction func confirmBtn(_ sender: Any) {...} 此功能并弹出到 Firstview。

    每次你去 firstviewcontroller(期望第三个按钮操作)addressArray 变量都会为空。

    您可以使用global 数组来修复它,或者创建一个结构并将值添加到结构的数组属性中。

    【讨论】:

      【解决方案3】:

      声明一个全局变量,而不是所有这些。

      var addressArray : [String] = []
      

      然后从任何视图控制器更新值,当您返回 FirstViewController 时,在 viewWillAppear 中重新加载您的 tableView

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-20
        • 2022-11-13
        • 1970-01-01
        • 1970-01-01
        • 2016-09-23
        • 2021-09-22
        • 1970-01-01
        相关资源
        最近更新 更多