![](/img/trans.png)
[英]How to modally present a ViewController, and then the run a callback function / block after the ViewController has been dismissed, without Delegate?
[英]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.