swift - tableView的目的(_ :objectValueFor:row:)

标签 swift nstableview

The documentation for the NSTableViewDataSource protocol

This method is mandatory

如果您创建一个新的 NSTableViewDataSource,编译器会要求您提供此方法以及 numberOfRows(in tableView: NSTableView) .

到目前为止,一切都很好。如果您提供它,它会立即为每一行调用一次......但是如果您删除它,该表似乎可以像没有它一样工作。基于 View 的表中似乎与此方法完全没有联系:在 NSTableViewDelegate 的 tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) 中方法,我根据数据源的内容数组返回新 View ,如果我将一堆无意义的数据粘贴到objectValueFor: row中(直到并包括返回相同的字符串 - 我的表对象不是字符串)没有任何效果,因为我正在 viewFor tableColumn: 中设置 NSTableViewCells 的值。

如果我通过直接从数据源检索相应的值(例如)来处理选择更改(以及我想对对象执行的任何操作)

func tableViewSelectionDidChange(_ notification: Notification) {
print(dataSource.allItems[tableView.selectedRow])
}

有什么理由要实现这个方法吗?我看不到该对象实际使用的任何点,感觉就像来自基于单元格的表格的人工制品。

我不想通过省略必要的方法来破坏我的代码,但由于我即将尝试使用自定义数据源进行一些奇怪而美妙的事情,我也不想使用以下方法使我的代码过于复杂被调用,但其结果似乎完全没有意义。

最佳答案

如果单元格 View 响应setObjectValue:,则表格 View 调用该方法并传入从tableView获取的行的对象值(_:objectValueFor:row:).

NSTableCellView 确实响应该方法,并且是一个常见的单元格 View 类。 NSTextField 也是如此;它实际上继承自 NSControl

就您而言,您的单元格 View 没有 objectValue 属性,或者更有可能的是,您只是没有使用它。

一种常见的配置是使用 NSTableCellView 作为单元格 View ,然后使用绑定(bind)将 subview 绑定(bind)到通过其 objectValue 属性的关键路径。

关于swift - tableView的目的(_ :objectValueFor:row:),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41708427/

相关文章:

swift - Swift Process 对象的参数问题

arrays - 整数与 boolean 数组 Swift 性能

cocoa - 双击 Cocoa 中的 NSTableView 行?

cocoa - 有关在NSTableView中使用NSViews的特定教程

swift - 标题顶部的 NSTableView 单元格

swift - 将.xib文件内TableCellView中项目的outlet设置为自定义NSTableCellView子类

swift - 使用 Swift 更改 imageTap 手势识别选择器方法中的 UICollectionViewcell 内容

ios - 以编程方式添加的按钮目标操作在自定义 tableviewcell 中不起作用

ios - 选择时 UISearchBar 的宽度和位置会发生变化

objective-c - 无法在 NSTableView 中进行空选择