首页 > 解决方案 > ViewController #2 关闭后如何在 ViewController #1 中重新加载数据()?

问题描述

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

标签: iosswiftuiviewcontrollertableviewdismiss

解决方案


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

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

protocol RefreshViewDelegate {
    func refreshView()
}

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

在里面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
    }
}

推荐阅读