gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 07:16:52 24 4
gpt4 key购买 nike

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:,则 TableView 调用该方法并传入从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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com