swift - 无法设置委托(delegate)来重新加载 TableView

标签 swift delegates tableview nstableview

我正在尝试在委托(delegate)的帮助下重新加载 TableView 。我在堆栈溢出上找到了大量示例,但最终总是出现错误。

我的第一个 Controller 应该更新 TableView :

import Cocoa

class ViewController: NSViewController {

    @IBOutlet weak var tableView: NSTableView!

    var tableViewData: [[String:String]] = []

    override func viewDidLoad() {
        super.viewDidLoad()
        ...
        self.tableView.delegate = self as NSTableViewDelegate
        self.tableView.dataSource = self
        self.tableView.reloadData()
    }

    override var representedObject: Any? {
        didSet {
        }
    }

    func reloadTableData(_ notification: Notification) {
        tableView.reloadData()
    }
}

extension ViewController: NSTableViewDataSource, NSTableViewDelegate {
    func numberOfRows(in tableView: NSTableView) -> Int {
        return tableViewData.count
    }

    func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView?{
        var result:CustomTableCellview
        result  = tableView.make(withIdentifier: (tableColumn?.identifier)!, owner: self) as! CustomTableCellview
        result.textField?.stringValue = tableViewData[row][(result.textField?.identifier!)!]!
        result.secondTextField?.stringValue = tableViewData[row][result.secondTextField.identifier!]!
        return result
    }
}

extension ViewController: PageControllerDelegate {
    func updateTableData() {
        tableView.reloadData()
    }
}

我的第二个 Controller ,它应该告诉第一个 Controller 它可以更新 TableView :

import Cocoa

protocol PageControllerDelegate {
    func updateTableData()
}

class PageController: NSPageController {

    var delegate: PageControllerDelegate?

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func saveData(sender: NSButton) {
        ...
        delegate?.updateTableData()
        self.dismiss(self)
    }
}

在 PageController 中我收到以下错误:

Property 'delegate' with type 'PageControllerDelegate?' cannot override a property with type 'NSPageControllerDelegate?' (aka 'Optional<NSPageControllerDelegate>')

最佳答案

将委托(delegate)协议(protocol)名称重命名为 MyPageControllerDelegate 之类的名称。似乎已经有一个名为 PageControllerDelegate 的东西是由你或 Apple 定义的

关于swift - 无法设置委托(delegate)来重新加载 TableView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45044996/

相关文章:

iOS 使用drawrect 在tableView 中绘制图像

ios - 如何使用在 UIViewController 中嵌入容器的静态单元委托(delegate) UITableViewController?

kotlin - Kotlin 中的懒惰类委托(delegate)?

ios - View Controller 不刷新

View 加载前的 Swift 观察者

ios - 核心数据 : annotation: Failed to load optimized model at path '/var/containers/Bundle/.... '

c# - 参数化通用事件系统

java - 如何从第二个 Controller 将值传递到已打开的阶段(第一个 Controller )?

kotlin - TornadoFX TableView:获取选定的行值

ios - DatabaseReference中的key什么时候可以为nil?