Невозможно заполнить созданный XIB Swift TableView с помощью MacOS - PullRequest
0 голосов
/ 08 февраля 2020

Я не могу заполнить быстрое табличное представление на основе ячеек в macOS 10.14.6, используя Xcode 11.2 XIB. Приложение основано на документе, а tableView создается с отдельным Xib WindowController. Подобный проект, созданный программно в XCode, работает нормально, включая перетаскивание; Я относительно новичок в использовании XIBS и, вероятно, не все правильно. Идентификатор столбца был установлен в xib, а NSTableViewDataSource и NSTableViewDelegate были добавлены в контроллер окна. Далее следует соответствующий исходный код, и полный проект Xcode можно загрузить здесь: https://www.dropbox.com/s/6tsb98b7iihhfxl/tableView.zip?dl=0

Любая помощь в получении tableView, заполненного массивом String, будет принята с благодарностью. Я также хотел бы, чтобы работало перетаскивание, но пока можно просто получить элементы массива, которые будут отображаться в табличном представлении. Он правильно создает четыре строки, соответствующие количеству элементов в массиве, но видимого текста нет. TableView основан на ячейках, но я мог бы использовать view, если это будет работать лучше. Заранее спасибо.

class WindowController: NSWindowController, NSTableViewDataSource, NSTableViewDelegate {

@IBOutlet var tableView: NSTableView!

var sports : [String] = ["Basketball","Baseball","Football","Tennis"]

    override func windowDidLoad() {
        super.windowDidLoad()
        tableView.registerForDraggedTypes([NSPasteboard.PasteboardType.fileURL])
        tableView.dataSource = self
        tableView.delegate = self
    }

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

    func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
        var value : Any? = 0
        let columnIdentifier : String = (tableColumn?.identifier.rawValue)!
         if (columnIdentifier == "Col1"){
            value = sports[row]
        }
        return value
     }

1 Ответ

0 голосов
/ 08 февраля 2020

В Document.swift windowController освобождается в конце showTableView(), и табличное представление теряет свой источник данных. Добавьте windowController к оконным контроллерам документа или держите строгую ссылку на windowController.

@IBAction func showTableView(_ sender: Any) {
    let windowController = WindowController.init(windowNibName:NSNib.Name("WindowController"))
    addWindowController(windowController)
    windowController.showWindow(nil)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...