我不知道我是否错误地设置了这个,但我所做的对我来说是有意义的。
我有一个NSTableView,里面有两列 - 左边是属性列,右边是值列。 values列包含NSComboBoxCells,它们将(动态地)预先填充与左列中属性相关的值。
该表绑定到引用对象数组的NSArrayController。引用的对象定义了许多属性,包括属性列的一个属性(属性称为“名称”),值列的值(称为“值”),以及返回可用值的NSArray的possibleValues属性依赖于财产。
只要未编辑值单元格,这一切都正常工作。编辑完成后,可能值的下拉列表为空。
搜索过后,我发现建议应检查组合框单元格的自动完成复选框,但检查它不会改变行为。我希望用户能够从一个表格单元格切换到下一个表格单元格,保持编辑模式,并且能够使用预先填充的可能值列表。
在包含要在表中显示的数据的对象上,我已经声明了keyPathsForValuesAffecting ...方法:
+ (NSSet *)keyPathsForValuesAffectingPossibleValues
{
return [NSSet setWithObject:@"name"];
}
详细的绑定是这样的:
属性列绑定到arrayController
价值绑定:
Controller Key: arrangedObjects
Model Key Path: name
值列绑定到同一个arrayController
内容绑定:
Controller Key: arrangedObjects
Model Key Path: possibleValues
价值绑定:
Controller Key: arrangedObjects
Model Key Path: value
NSComboBoxCell 不受任何限制。我已经尝试将单元格的内容绑定到与值列的值绑定相同,但是我得到了一个对象列表 - 而不是我创建的字符串列表。
存储在NSMutableArray中的对象的头文件绑定到NSArrayController基本上看起来像:
#import <Foundation/Foundation.h>
@interface TableProperty : NSObject {
NSString *name;
NSString *value;
}
@property (readwrite, strong) NSString *name;
@property (readwrite, strong) NSString *value;
@property (readonly, assign) NSArray *possibleValues;
@end
合成名称和值属性。 possibleValues属性是一个返回NSString对象数组的方法 - 其内容取决于name的值。
我在possibleValues方法中设置了一个断点,当在单元格上启动编辑模式时,它会被击中(两次)(两次都返回正确的NSArray)。一旦进入编辑模式,按下键盘上的DOWN按钮会弹出一个空框 - 这是我想要填充值的那个框。如果用鼠标单击单元格右侧的选择箭头,我会得到正确值列表。
我无法使用基于视图的表,因为我需要此应用程序才能在Snow Leopard计算机上运行。
答案 0 :(得分:1)
NSComboBoxCell从NSTextFieldCell继承自动完成功能,该功能要求您提供数据源。没有绑定可以为您实现功能。这样做的原因是控件正在使用NSStrings,您的列表可以有多个具有相同字符串表示的项目。