NSPopupButton 在 NSTableview 中不起作用
NSPopupButton not working in an NSTableview
我有一个使用 Core Data 的程序,NSTableView
的列通过 NSArrayController
绑定。这没有问题,table 列填充没有问题。我正在扩展 table 以包含 NSPopupButton
- 但是添加按钮时会发生一些奇怪的事情。只需将按钮拖到列中,然后 运行 没有连接或绑定到 Popup
的程序,所有其他列都不会正确填充 - 它们只显示默认的占位符文本。
想法?
我可以填充 NSPopupButton
,但其他列仍然只显示默认文本。如果我删除 NSPopupButton
一切正常。
为什么其他列会有问题?我尝试添加一个 CheckBox
并遇到同样的问题。我在网上搜索过,但是没有找到答案。
我将不胜感激 thoughts/suggestions。
提前致谢。
[编辑]----
Table 是基于视图的 NSTableCellView
。
数组控制器:
- 绑定到实体名称
- 参数,绑定主控;键path:managedObjectContext
Table查看:
列:
- 值:绑定到arrayController,关键路径:姓名、年龄等...
NSPopupButton
:
值:绑定到主控制器,路径:catArrayController.arrangedObjects.name
主控:
IBOutlet:catArrayController
绑定到 IB
中的 catArrayController
对于基于视图的 table 视图,您打算将 table 视图的内容绑定绑定到数组控制器。您不 绑定列的值绑定。来自 Table View Programming Guide for Mac: Populating a Table View Using Cocoa Bindings:
Note: In an NSView
-based table, you bind the table view’s content to the array controller’s arrangedObjects
. This differs from the technique you use if you’re working with an NSCell
-based table.
该绑定会导致每个单元格视图将其 objectValue
属性 设置为对应于该行的对象,如果它具有这样的 属性。请注意,单元格视图不会获得特定于列的值。一行中的所有单元格都获得相同的值。
由于您的单元格视图是 NSTableCellView
,因此它们具有 objectValue
属性。然后,单元格视图的子视图应该将它们的值绑定绑定到单元格视图,关键路径为 运行ning 通过 objectValue
到特定的 属性(姓名、年龄等) .
在旧的基于 NSCell
的 table 视图中,您通常不会在设计时绑定 table 视图本身的内容(或选择索引或排序描述符)绑定.您将像您所做的那样绑定 table 列。在 运行 时间,table 视图将根据其列的绑定自动为其自己的内容、选择索引和排序描述符建立绑定。我怀疑这种行为的某些版本正在您的应用程序中发生,这使得事情能够正常工作。但是,我怀疑添加新列会破坏该系统。它最初用于基于视图的 table 视图是侥幸,因此本质上是脆弱的。
我有一个使用 Core Data 的程序,NSTableView
的列通过 NSArrayController
绑定。这没有问题,table 列填充没有问题。我正在扩展 table 以包含 NSPopupButton
- 但是添加按钮时会发生一些奇怪的事情。只需将按钮拖到列中,然后 运行 没有连接或绑定到 Popup
的程序,所有其他列都不会正确填充 - 它们只显示默认的占位符文本。
想法?
我可以填充 NSPopupButton
,但其他列仍然只显示默认文本。如果我删除 NSPopupButton
一切正常。
为什么其他列会有问题?我尝试添加一个 CheckBox
并遇到同样的问题。我在网上搜索过,但是没有找到答案。
我将不胜感激 thoughts/suggestions。
提前致谢。
[编辑]----
Table 是基于视图的 NSTableCellView
。
数组控制器:
- 绑定到实体名称
- 参数,绑定主控;键path:managedObjectContext
Table查看:
列:
- 值:绑定到arrayController,关键路径:姓名、年龄等...
NSPopupButton
:
值:绑定到主控制器,路径:catArrayController.arrangedObjects.name
主控:
IBOutlet:catArrayController 绑定到 IB
中的 catArrayController对于基于视图的 table 视图,您打算将 table 视图的内容绑定绑定到数组控制器。您不 绑定列的值绑定。来自 Table View Programming Guide for Mac: Populating a Table View Using Cocoa Bindings:
Note: In an
NSView
-based table, you bind the table view’s content to the array controller’sarrangedObjects
. This differs from the technique you use if you’re working with anNSCell
-based table.
该绑定会导致每个单元格视图将其 objectValue
属性 设置为对应于该行的对象,如果它具有这样的 属性。请注意,单元格视图不会获得特定于列的值。一行中的所有单元格都获得相同的值。
由于您的单元格视图是 NSTableCellView
,因此它们具有 objectValue
属性。然后,单元格视图的子视图应该将它们的值绑定绑定到单元格视图,关键路径为 运行ning 通过 objectValue
到特定的 属性(姓名、年龄等) .
在旧的基于 NSCell
的 table 视图中,您通常不会在设计时绑定 table 视图本身的内容(或选择索引或排序描述符)绑定.您将像您所做的那样绑定 table 列。在 运行 时间,table 视图将根据其列的绑定自动为其自己的内容、选择索引和排序描述符建立绑定。我怀疑这种行为的某些版本正在您的应用程序中发生,这使得事情能够正常工作。但是,我怀疑添加新列会破坏该系统。它最初用于基于视图的 table 视图是侥幸,因此本质上是脆弱的。