Хитрость здесь в том, что вам нужно где-то еще , чтобы поместить значение NSComboBox. NSArrayController отлично подходит для предоставления значений запасов в NSComboBox, но вы можете вводить произвольные значения в NSComboBox, которые могут отсутствовать в contentArray NSArrayController, поэтому неудивительно, что вам нужно куда-то еще поместить это значение. Я смог быстро смоделировать это, просто добавив простое значение в 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
- Значения содержимого -> Array Controller.arrangedObjects.name
- Значение -> App Delegate.comboBoxValue (отметьте
Continuously Updates Value
, если вы хотите, чтобы NSTextField обновлялся по буквам при вводе в NSComboBox)
NSTextField:
- Значение -> App Delegate.comboBoxValue (отметьте
Continuously Updates Value
, если вы хотите, чтобы NSComboBox обновлялся по буквам при вводе в NSTextField)
Если вы хотите, чтобы новые значения, которые вы вводите, были добавлены в массив, я сожалею, что это нелегко выполнить только с этими двумя элементами управления и привязками. Это немного сложнее. Но хитрость для простого случая заключается в том, что вам нужно место для хранения значения , отличного от , чем NSArrayController, который вы используете для предоставления предварительно загруженных значений в NSComboBox.