Ios 关闭viewController后重新加载tableView

Ios 关闭viewController后重新加载tableView,ios,uitableview,uiviewcontroller,Ios,Uitableview,Uiviewcontroller,我有一个ViewController(VCA),里面有一个TableView。从该ViewController可以调用另一个ViewController(VCB)。在第二个VC中,可以向plist添加一个项目,用于在VCA中填充TableView。问题是,当我保存新项目并关闭VCB时,我无法在VCA中重新加载TableView 我发现了很多例子: 阅读后,我尝试使用以下代码: **IN VCB** import UIKit protocol AddItemDelegat

我有一个ViewController(VCA),里面有一个TableView。从该ViewController可以调用另一个ViewController(VCB)。在第二个VC中,可以向plist添加一个项目,用于在VCA中填充TableView。问题是,当我保存新项目并关闭VCB时,我无法在VCA中重新加载TableView

我发现了很多例子:

阅读后,我尝试使用以下代码:

    **IN VCB**

import UIKit 

protocol AddItemDelegateProtocol {
    func didAddItem()
}

class VCB: UIViewController {

    var delegate : AddItemDelegateProtocol?
    ...
}

@IBAction func saveButton(_ sender: Any) {
        .... 
   self.delegate?.didAddItem()
   dismiss(animated: true, completion: nil)     
   }



**In VCA**

class VCA: UIViewController, UITableViewDelegate, UITableViewDataSource, AddItemDelegateProtocol {

let addItemVC = VCB()
...

override func viewDidLoad() {
        super.viewDidLoad()

        addItemVC.delegate = self
        ...
    }

func didAddItem() {
        self.tableView.reloadData()
    }
但这不起作用。我不 明白我错在哪里。能够 你能帮我吗

编辑:我的解决方案 我这样解决:

我已经创建了一个singleton,我在其中声明:

    class DataManager {

        static let shared = DataManager()
        var firstVC = VCA()
.....
}
然后,在VCA的VIEWDID加载中:

DataManager.shared.firstVC = self
现在,在VCB的Save按钮中,我可以调用:

@IBAction func saveButton(_ sender: Any) {
    ........
    DataManager.shared.firstVC.tableView.reloadData()
    dismiss(animated: true, completion: nil)
}

在这里,当尚未显示viewcontroller时,您正在调用表的重新加载数据。i、 e,甚至在您关闭viewcontroler VCB并显示viewcontroller VCA之前,您正在调用reloadData。
尝试在VCA的
视图中调用reload data将显示(动画:Bool)
函数。

您可以通过两种方式执行此操作:-

1)
在VCA中做一件事

VCA

   override func viewWillAppear(_ animated: Bool){
       tableView.reloadData()
   }
 override func prepare(for segue: UIStoryboardSegue, sender: Any!) {
  VCB.instanceOfVCA = self   // Pass the value of VCA in instance of VCB while navigating through segue
}
如果这不起作用,那么试试这个

(二) 在VCB中创建一个VCA实例,当您从VCA移动到VCB时,将VCA的值传递到VCB实例,然后从那里重新加载表

VCB

    var instanceOfVCA:VCA!    // Create an instance of VCA in VCB

   func saveButton(){
    instanceOfVCA.tableView.reloadData()  // reload the table of VCA from the instance
    dismiss(animated: true, completion: nil) 
  }
VCA

   override func viewWillAppear(_ animated: Bool){
       tableView.reloadData()
   }
 override func prepare(for segue: UIStoryboardSegue, sender: Any!) {
  VCB.instanceOfVCA = self   // Pass the value of VCA in instance of VCB while navigating through segue
}

尝试以下操作:进行如下更改

let addItemVC : VCB? = nil
在ViewDidLoad中

 override func viewDidLoad() {
            super.viewDidLoad()
            addItemVC = (storyboard?.instantiateViewController(withIdentifier: "ViewControllerID") as! SelectionViewController?)! // change ViewControllerID with your controller id
            addItemVC.delegate = self

    }

你问题中的代码非常好。我也用同样的方法,效果很好。
我知道代码中的问题是您仅使用self.tableView.reloadData()刷新表视图,但可能是您忘记了刷新数据模型-表视图的数据源。例如,如果从核心数据中删除实体,则需要重新提取数据,然后重新加载表视图。

我使用通常用于在视图控制器之间传递数据的委托/协议实现了这一点,但在本例中,我只是调用了函数,而没有传递数据,并在该函数中放置了(tableView.reloadData())和它的工作方式非常相似:)


突出google“在视图控制器之间传递数据并使用我上面解释的方法”

您如何移动到此VCB?通过中的按钮简单连接显示ITT的代码VCA@Aravind谢谢你的酒你的解决方法解决了我的问题!感谢tiphappy的使用。不幸的是,我不明白为什么,在关闭VCA后,会出现VCA不记得的视图。如果你从VCA中显示VCB,那么在关闭VCB后,VCA的视图会被称为DHI@Aravind A R,可能我犯了一些错误,我是个新手。但是我找到了一个解决方案,我在我的问题下面加了一个。谢谢你的时间,我已经查过你的密码了。它正在使用这个解决方案。嗨@KKRocks,我已经用我找到的解决方案编辑了我的问题。谢谢你的时间嗨@Ayush sharma,我用适合我的解决方案编辑了我的问题。谢谢你的时间谢谢你的建议,我用单音解决了是的,我知道。我把它贴出来了,因为那是我的问题。也许它会帮助那些面临类似问题的人。