簡體   English   中英

關閉 ViewController #2 后如何在 ViewController #1 中重新加載數據()?

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

我是 iOS 新手,這是我的問題:

我有一個帶有一些 textFields 和 Save 按鈕的 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)
}

在按下 Save 按鈕並關閉 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
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM