使用 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)

    }

现在在您的代码中实现这些代码。希望对你有用。