【问题标题】:Force refresh on another ViewController component with swift使用 swift 强制刷新另一个 ViewController 组件
【发布时间】:2016-09-07 07:10:17
【问题描述】:

我正在尝试在 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 控制器到我的第二个视图控制器的 segue。 (这是一个工具栏按钮)。 segue 是“Sheet”类型的。

第二个控制器允许我在全局变量数组中添加一个元素,并带有一个“保存”按钮。

第二个控制器上的代码

@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 控制器之间。

你能帮忙吗?

谢谢, 尼古拉斯

【问题讨论】:

    标签: swift nsviewcontroller


    【解决方案1】:

    我认为,你想从 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】:

    如果您希望表格在视图出现时自动重新加载,请将其添加到 viewWillAppear

    self.tableView.performSelectorOnMainThread(#selector(UITableView.reloadData), withObject: nil, waitUntilDone: true)
    

    【讨论】:

    • 这是我的主 ViewController 中的代码:self.mainCoinTable.performSelectorOnMainThread(#selector(NSTableView.reloadData), withObject: nil, waitUntilDone: true) 在覆盖覆盖函数 viewWillAppear() 中。但是,当我在第二个控制器上使用 self.dismiss 时,不会调用此函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 2020-11-04
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多