我有一个NSArrayController,我填写了awakeFromNib
方法。数据具有键:id
,name
和description
。我有一个ComboBox和一个TextField绑定到NSArrayController,第一个带有名称,第二个带有id。如果我在ComboBox中更改选择,我希望TextField中的值更改,反之亦然。我阅读了有关TextField和ComboBox绑定的文档,但我不知道如何实现此目的。
最佳答案
这里的窍门是您需要其他地方放置NSComboBox的值。 NSArrayController可以很好地为NSComboBox提供库存值,但是您可以在NSComboBox的contentArray中键入任意值,而不是将其输入到NSComboBox中,因此在其他地方放置该值也就不足为奇了。我可以像这样通过在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:
内容-> Array Controller.arrangedObjects
内容值->数组Controller.arrangedObjects.name
值-> App Delegate.comboBoxValue(如果要在输入NSComboBox时逐字母更新NSTextField,请选中
Continuously Updates Value
)NSTextField:
值-> App Delegate.comboBoxValue(如果要在输入NSTextField时逐字母更新NSComboBox,请选中
Continuously Updates Value
)如果您希望将键入的新值添加到数组中,很遗憾地说,仅使用这两个控件和绑定就不容易做到。这有点复杂。但是,简单情况的诀窍是,除了用于向NSComboBox提供预加载的值的NSArrayController之外,还需要一些地方来存储值。