我试图在2个视图控制器之间传递触发器,但我找不到有效的东西...
我的主控制器带有NSTableView,源链接,View Base。
主控制器类:
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。 (它是ToolBar按钮)。 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控制器之间。
你能帮忙吗?
谢谢, 尼古拉斯
答案 0 :(得分:3)
我认为,您想要从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)
}
现在在编码中实现这些代码。希望它适合你。
答案 1 :(得分:0)
如果您希望在显示视图时自动重新加载该表,请将其添加到viewWillAppear
self.tableView.performSelectorOnMainThread(#selector(UITableView.reloadData), withObject: nil, waitUntilDone: true)