在 ViewController #2 被解雇后如何在 ViewController #1 中重新加载数据()?

How to reloadData() in ViewController #1 after ViewController #2 is dismissed?

我是 iOS 的新手,这是我的问题:

我有一个带有一些文本字段和保存按钮的 saveCardViewController(模态呈现)。

@IBAction func Save(_ sender: UIButton) {
    
    date = datePicker.date
    
    try! realm.write() {
        
        sessionCard.pokerType = pokerTypeSegment.titleForSegment(at: pokerTypeSegment.selectedSegmentIndex)!
        date = dateFormatter.string(from: date)
        sessionCard.handsPlayed = Int(handPlayedTextlabel.text!) ?? 0
        sessionCard.moneyIn = Int(moneyInTextLabel.text!) ?? 0
        sessionCard.moneyOut = Int(moneyOutTextLabel.text!) ?? 0
        sessionCard.timePlayed = Int(timePlayedTextLabel.text!) ?? 0
        sessionCard.sortDate = date
        
        realm.add(sessionCard)
        
    }
    dismiss(animated: true, completion: nil)
}

在按下“保存”按钮并关闭 saveCardViewController 后,如何在主 ViewController 上重新加载数据()。

谢谢!

编辑 # 1:

谢谢@davidev 的回答,我做了修改但还是没有更新

我的 ViewController 使用 TableView:

class SessionViewController: BackgroundViewController, RefreshViewDelegate {


func refreshView() {
    tableView.reloadData()
}
    
override func viewDidLoad() {
    super.viewDidLoad()
    
    tableView.delegate = self
    tableView.dataSource = self       

}

我的 ViewController 带有数据和保存按钮:


    protocol RefreshViewDelegate {
    func refreshView()
}

class AddSessionViewController: UIViewController, UITextFieldDelegate {
    
    var delegate: RefreshViewDelegate?
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
               
        
    }

 @IBAction func TEST2(_ sender: UIButton) {
        
        delegate?.refreshView()
        dismiss(animated: true, completion: nil)
        
    }

您可以使用 delegate 模式来实现。

像这样声明您的刷新协议:

protocol RefreshViewDelegate {
    func refreshView()
}

使您的父视图符合此协议并使用您的自定义刷新操作实现 refreshView()。还要确保将子视图的委托设置为 self。

saveCardViewController 中声明你的委托变量

var delegate : RefreshViewDelegate?

并在您的 IBaction 中调用委托操作

delegate?.refreshView()

编辑:

我刚看到你更新的代码。当您使用 Storyboard segues 时,您仍然必须通过代码设置委托。在您的主视图控制器中添加功能:

override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) {
    if let viewController = segue.destinationViewController as? AddSessionViewController
    {
        viewController.delegate = self
    }
}