我有一个NSArrayController,我填写了awakeFromNib
方法。数据包含密钥:id
,name
和description
。我有一个ComboBox和一个绑定到NSArrayController的TextField,第一个绑定了名称,第二个绑定了id。如果我更改ComboBox中的选择,我希望TextField中的值更改,反之亦然。我阅读了TextField和ComboBox绑定的文档,但我不明白如何实现这一点。
答案 0 :(得分:1)
这里的诀窍是你需要其他地方来放置NSComboBox的值。 NSArrayController适用于向NSComboBox提供库存值,但是您可以在NSComboBox中键入任意值,这些值可能不在NSArrayController的contentArray中,因此您需要在其他位置放置值并不奇怪。我可以通过在AppDelegate上添加一个简单的值来快速模拟这个:
@interface SOAppDelegate : NSObject <NSApplicationDelegate>
@property (assign) IBOutlet NSWindow *window;
// The NSArrayController you were talking about...
@property (assign) IBOutlet NSArrayController* popupValues;
// The other place to store data...
@property (retain) id comboBoxValue;
@end
然后在实施中:
@implementation SOAppDelegate
@synthesize window = _window;
@synthesize comboBoxValue = _comboBoxValue;
- (void)dealloc
{
[_comboBoxValue release];
_comboBoxValue = nil;
[super dealloc];
}
-(void)awakeFromNib
{
[super awakeFromNib];
NSMutableDictionary* item1 = [NSMutableDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithUnsignedInteger: 1], @"id",
@"Item 1 Name", @"name",
@"Item 1 Description", @"description",
nil];
NSMutableDictionary* item2 = [NSMutableDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithUnsignedInteger: 2], @"id",
@"Item 2 Name", @"name",
@"Item 2 Description", @"description",
nil];
NSMutableDictionary* item3 = [NSMutableDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithUnsignedInteger:3], @"id",
@"Item 3 Name", @"name",
@"Item 3 Description", @"description",
nil];
NSMutableArray* array = [NSMutableArray arrayWithObjects: item1, item2, item3, nil];
self.popupValues.content = array;
}
@end
然后对于绑定,我将其设置为:
NSComboBox:
Continuously Updates Value
)的NSTextField:
Continuously Updates Value
)如果你想要输入的新值被添加到数组中,我很遗憾地说,只有这两个控件和绑定才能实现。这有点复杂。但是这个简单案例的技巧是你需要一些地方存储值 other ,而不是你用来为NSComboBox提供预加载值的NSArrayController。