使用 swift 强制刷新另一个 ViewController 组件
Force refresh on another ViewController component with swift
我正在尝试在 2 个视图控制器之间传递触发器,但找不到有效的方法...
我有一个带 NSTableView 的主控制器,源链接,View Base。
主控制器class :
class ViewController: NSViewController {
我在全局变量中定义了一个数组。
在 viewDidLoad 上,我在数组中添加了 2 个元素,然后使用 setDelegate 和 setDataSource。
效果很好。
myLib.myCoins = fillCoinsTable()
print ("My lib has \(myLib.myCoins.count) objects ")
mainCoinTable.setDelegate(self)
mainCoinTable.setDataSource(self)
我有一个从 WINDOWS CONTROLLER 到我的第二个视图 Controller 的转接。
(这是一个工具栏按钮)。 segue 是 "Sheet" 类型。
第二个控制器允许我使用按钮 "Save" 在我的全局变量数组中添加一个元素。
第二个控制器上的代码
@IBAction func addCoinButton(sender: AnyObject) {
//We add the coin
let newCoin:coin = coin(n: textName.stringValue)
newCoin.Year = Int.init(textYear.stringValue)
myLib.myCoins.append(newCoin)
self.dismissController(self)
}
如果我在主控制器上添加一个按钮,以在 TableView 上重新加载数据,它工作正常。添加第三个元素。
但我希望它是自动的....
我试过 segue,但我的不是在视图控制器之间,而是在 windows 控制器之间。
你能帮忙吗?
谢谢,
尼古拉斯
如果您希望 table 在视图出现时自动重新加载,请将此添加到 viewWillAppear
self.tableView.performSelectorOnMainThread(#selector(UITableView.reloadData), withObject: nil, waitUntilDone: true)
我想,你想从 oneViewController 添加数据而不按按钮,你想在导航或按后退按钮后,你想自动重新加载 tableview 以显示更新的结果,对吧。
如果我没记错的话,这个解决方案对你有用。
按照以下步骤操作:
第 1 步:
在您的视图控制器中添加此代码,您希望从中向数组或数据库中添加数据,而不是单击按钮。
override func viewDidLoad()
{
super.viewDidLoad()
let backItem = UIBarButtonItem(title: "Back", style: .Plain, target: self, action: "goBack")
self.navigationItem.leftBarButtonItem = backItem
}
func goBack()
{
NSNotificationCenter.defaultCenter().postNotificationName("load", object: nil)
self.navigationController?.popViewControllerAnimated(true)
}
第 2 步:
现在是最后一步。
现在将下面的代码添加到您的结果视图控制器中,您希望在其中自动更新结果。
func loadList(notification: NSNotification){
self.TableView.reloadData()
}
override func viewWillAppear(animated: Bool) {
NSNotificationCenter.defaultCenter().addObserver(self, selector: "loadList:",name:"load", object: nil)
}
现在在您的代码中实现这些代码。希望对你有用。
我正在尝试在 2 个视图控制器之间传递触发器,但找不到有效的方法...
我有一个带 NSTableView 的主控制器,源链接,View Base。
主控制器class :
class ViewController: NSViewController {
我在全局变量中定义了一个数组。 在 viewDidLoad 上,我在数组中添加了 2 个元素,然后使用 setDelegate 和 setDataSource。 效果很好。
myLib.myCoins = fillCoinsTable()
print ("My lib has \(myLib.myCoins.count) objects ")
mainCoinTable.setDelegate(self)
mainCoinTable.setDataSource(self)
我有一个从 WINDOWS CONTROLLER 到我的第二个视图 Controller 的转接。 (这是一个工具栏按钮)。 segue 是 "Sheet" 类型。
第二个控制器允许我使用按钮 "Save" 在我的全局变量数组中添加一个元素。
第二个控制器上的代码
@IBAction func addCoinButton(sender: AnyObject) {
//We add the coin
let newCoin:coin = coin(n: textName.stringValue)
newCoin.Year = Int.init(textYear.stringValue)
myLib.myCoins.append(newCoin)
self.dismissController(self)
}
如果我在主控制器上添加一个按钮,以在 TableView 上重新加载数据,它工作正常。添加第三个元素。
但我希望它是自动的....
我试过 segue,但我的不是在视图控制器之间,而是在 windows 控制器之间。
你能帮忙吗?
谢谢, 尼古拉斯
如果您希望 table 在视图出现时自动重新加载,请将此添加到 viewWillAppear
self.tableView.performSelectorOnMainThread(#selector(UITableView.reloadData), withObject: nil, waitUntilDone: true)
我想,你想从 oneViewController 添加数据而不按按钮,你想在导航或按后退按钮后,你想自动重新加载 tableview 以显示更新的结果,对吧。
如果我没记错的话,这个解决方案对你有用。
按照以下步骤操作:
第 1 步:
在您的视图控制器中添加此代码,您希望从中向数组或数据库中添加数据,而不是单击按钮。
override func viewDidLoad()
{
super.viewDidLoad()
let backItem = UIBarButtonItem(title: "Back", style: .Plain, target: self, action: "goBack")
self.navigationItem.leftBarButtonItem = backItem
}
func goBack()
{
NSNotificationCenter.defaultCenter().postNotificationName("load", object: nil)
self.navigationController?.popViewControllerAnimated(true)
}
第 2 步:
现在是最后一步。 现在将下面的代码添加到您的结果视图控制器中,您希望在其中自动更新结果。
func loadList(notification: NSNotification){
self.TableView.reloadData()
}
override func viewWillAppear(animated: Bool) {
NSNotificationCenter.defaultCenter().addObserver(self, selector: "loadList:",name:"load", object: nil)
}
现在在您的代码中实现这些代码。希望对你有用。