使用 NSTableViewDataSource 填充 NSPopUpButtonCell 的正确方法

发布于 2024-12-14 15:29:45 字数 213 浏览 1 评论 0原文

假设一个人有很多辆车,并且他们有一辆最喜欢的车。我似乎无法在文档中找到它描述了在表视图中填充 NSPopUpButtonCell 的正确方法,每行都不同。

例如,我将为每个人设置 1 行,“最喜欢的汽车”列中将有一个 NSPopUpButtonCell。每行都有不同的菜单项。第 1 排(Camaro、Cavalier、F150) 第 2 排(745li、Camaro、Town Car)等...

Lets say a Person has many Cars and they have a favorite Car. I cannot seem to find in the docs where it describes the right way to populate the NSPopUpButtonCell in a tableview, differently for each row.

For example, I would have 1 row for each person, the Favorite Car column would have an NSPopUpButtonCell in it. Each row has different menu items. Row 1 (Camaro, Cavalier, F150) Row 2 (745li, Camaro, Town Car) etc...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

很酷不放纵 2024-12-21 15:29:46

来自 NSTableColumn.h 文件

允许按行自定义用于此 NSTableColumn 的单元格。 NSTableView 在绘制“行”时将调用 -[tableColumn dataCellForRow:]。默认情况下,这只是调用 -dataCell。如果子类可能需要对不同的行使用不同的单元格,则可以重写 -dataCellForRow: 。在 Leopard 及更高版本上,可以使用 NSTableView 委托方法 -tableView:dataCellForTableColumn:row: 来避免子类化 NSTableColumn。在这两种情况下,返回的单元格应该正确实现 -copyWithZone:,因为 NSTableView 可能会复制单元格。

该表将向数据源询问弹出单元格中的 selectedIndex,然后向委托询问菜单项。我的委托和数据源是同一个对象,我们称其为 tableViewController。

当 tableViewController 在 objectValueForTableColumn: (数据源方法)中提供 selectedIndex 时,菜单中没有所有菜单时间,因此我必须调用 dataCellForRow 来获取菜单和菜单中所选项目的索引.
tableViewController 实现 dataCellForRow: 它创建一个新的 NSPopUpButtonCell 并用菜单项填充它。

它有效,但看起来很复杂。

From the NSTableColumn.h file

Allows per-row customization of the cell used for this NSTableColumn. NSTableView will call -[tableColumn dataCellForRow:] when drawing 'row'. By default this just calls -dataCell. Subclassers can override -dataCellForRow: if they need to potentially use different cells for different rows. On Leopard and higher, the NSTableView delegate method -tableView:dataCellForTableColumn:row: can be used as a convience to avoid subclassing NSTableColumn. In both cases, the returned cell should properly implement -copyWithZone:, since NSTableView may make copies of the cells.

The table will ask the datasource for the selectedIndex in the popupcell, then it will ask the delegate for the menu items. I had my delegate and datasource the same object, lets call it a tableViewController.

When the tableViewController is providing the selectedIndex in the objectValueForTableColumn: (datasource method), the menu doesn't have all the menu times in it, so I have to call the dataCellForRow to get the menu and the index of the selected item in the menu.
The tableViewController implements the dataCellForRow: which creates a new NSPopUpButtonCell and populates it with the menu items.

It works, but seems convoluted.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文