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