我有一个NSArrayController,我填写了awakeFromNib方法。数据具有键:idnamedescription。我有一个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之外,还需要一些地方来存储值。

10-05 18:04