【问题标题】:MacOS: tableView:viewForTableColumn:row: stops being called after a certain amount of rowsMacOS:tableView:viewForTableColumn:row:在一定数量的行后停止调用
【发布时间】:2019-07-09 09:19:52
【问题描述】:

我在 xib 文件中的 NSWindow 中有一个 NSTableView。 Interface Builder中的xib可以查看here。我正在使用基于视图的表格视图。

我的问题是tableView 中的单元格文本字段仅填充到表格的高度。从那时起,tableView:viewForTableColumn:row: 停止被调用,我只剩下正确的行数,但其中大多数没有文本。插图here

我实现的dataSourcedelegate方法如下:

    // MARK: - Table View Data Source
    func numberOfRows(in tableView: NSTableView) -> Int {
        return builds.count
    }

    func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
        guard let cellView = tableView.makeView(withIdentifier: tableColumn!.identifier, owner: nil) as? NSTableCellView else {
            return nil
        }
        let formatter = DateFormatter()
        formatter.dateFormat = "MMM d, yyyy"
        cellView.textField?.stringValue = formatter.string(from: builds[row].buildDate)
        return cellView
    }

我已经坚持了大约一天,但没有取得太大进展。我会很感激任何帮助

【问题讨论】:

  • 只有可见行需要视图,视图被回收。
  • 请将您的代码添加到问题中。
  • 已添加。 builds.count 是 92,但是 viewFor 方法在它停止之前只被调用了 12 或 13 次
  • 你为什么使用tableColumn!.identifier?您应该为单元格分配一个标识符并改用它。我不确定为什么它甚至显示前 12 个。从情节提要中,转到单元格并在按“ctrl+shift”的同时单击它。选择“表格单元视图”并从右侧窗格中的身份检查器更改标识符。然后,转到您的代码并将tableColumn!.identifier 更改为单元格ID。
  • @3li tableColumn!.identifier 非常好。如果未指定列,则框架会为列分配隐式标识符。

标签: swift macos cocoa nstableview


【解决方案1】:

亲爱的耶稣,我想通了。我的红润NSWindowController 被立即取消初始化,因此单元格显示为tableView 的可见部分,然后什么也没有!保持对控制器的引用解决了这个问题。

【讨论】:

    猜你喜欢
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    相关资源
    最近更新 更多