Как создать пользовательский NSTableCellView из NIB? - PullRequest
0 голосов
/ 20 декабря 2018

Я новичок в Swift и борюсь с NSTableView!Я пытаюсь создать пользовательский NSTableCellView из NIB.

Я хочу загрузить ячейку из NIB, потому что: - она ​​будет многократно использоваться в нескольких столбцах и нескольких табличных представлениях - она ​​будет визуально и функционально сложной (относительно) - она, вероятно, будет развиваться в процессе разработки

Я могу загрузить ячейку в табличном представлении, но при попытке заполнить представление я получаю сообщение об ошибке «Не удалось подключить выход из ... отсутствует сеттер или переменная экземпляра» в области отладкис данными.Пользовательская ячейка видна в табличном представлении, но, кажется, не создается.

Я искал решение в Интернете часами!Помогите, что мне не хватает?

Это мой TableViewController ...

protocol TableViewDelegate {
    func itemWithIndexWasSelected(value: Int)
}

class TableViewController: NSViewController {

    @IBOutlet weak var tableView: NSTableView!

    let tableViewData =
        [  [ "Column1": "John", "Column2": "Smith", "Hobby": "Birds"],
           [ "Column1": "Jane", "Column2": "Doe", "Hobby": "Fish"],
           [ "Column1": "Hal", "Column2": "Bernard", "Hobby": "Trees"],
           [ "Column1": "Harry", "Column2": "Bell", "Hobby": "Rocks"] ]


    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.delegate = self
        tableView.dataSource = self

        let customCellNib = NSNib.init(nibNamed: "CustomTableCellView", bundle: nil)
        tableView.register(customCellNib, forIdentifier: NSUserInterfaceItemIdentifier("CustomCellView"))
        tableView.reloadData()
    } 
}

extension TableViewController: NSTableViewDataSource, NSTableViewDelegate {

    func numberOfRows(in tableView: NSTableView) -> Int {
        return tableViewData.count
    }

    func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {

        if tableColumn?.identifier.rawValue == "CustomCell" { 
            let result: CustomTableCellView = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier("CustomCellView"), owner: self) as! CustomTableCellView

            result.hobbyLabel?.stringValue = tableViewData[row]["Hobby"]!
            result.hobbyButton?.title = "TESTTITLE"

            return result
        }

        else {
            let result = tableView.makeView(withIdentifier:(tableColumn?.identifier)!, owner: self) as! NSTableCellView
            result.textField?.stringValue = tableViewData[row][(tableColumn?.identifier.rawValue)!]!
        return result
        }
    } 
}

У меня CustomTableCellView с XIB с тем же именем ...

class CustomTableCellView: NSTableCellView {

    @IBOutlet weak var hobbyButton: NSButton!
    @IBOutlet weak var hobbyLabel: NSTextField!

}

У меня есть тестовый проект, который я могу отправить или загрузить ... помощь будет высоко оценена!

Это то, что я вижу.Я думал, что я был близко ... часов назад!

1 Ответ

0 голосов
/ 22 декабря 2018

При редактировании xib прокси-объект «Владелец файла» представляет объект, который передается как владелец makeView(withIdentifier:owner:) во время выполнения.В этом случае объектом-владельцем является контроллер представления.Вы можете установить класс Владельца файла в xib на TableViewController и подключить действия.Вы не можете установить класс Владельца файла на CustomTableCellView и подключить розетки.Вместо этого подключите выходы объекта просмотра CustomTableCellView.

...