2011-07-11 85 views
1

我有一個NSArrayController,我填寫awakeFromNib方法。該數據具有密鑰:id,namedescription。我有一個ComboBox和一個綁定到NSArrayController的TextField,第一個是名字,第二個是這個ID。如果我更改了組合框中的選擇,我希望TextField中的值發生更改,反之亦然。我閱讀了TextField和ComboBox綁定的文檔,但我不明白如何實現這一點。NSComboBox和NSTextField綁定

回答

1

這裏的訣竅是你需要在其他地方放置NSComboBox的值。 NSArrayController適用於向NSComboBox提供庫存值,但您可以將任意值輸入到NSArboBox中,該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:

  • 內容 - >陣列Controller.arrangedObjects
  • 含量值 - >陣Controller.arrangedObjects.name
  • 價值 - >應用Delegate.comboBoxValue(檢查Continuously Updates Value如果你想的NSTextField被更新信由字母,你在NSComboBox在打字)

的NSTextField:

  • 價值 - >應用Delegate.comboBoxValue(檢查Continuously Updates Value如果你想NSComboBox進行更新信由字母,你在的NSTextField在打字)

如果您希望鍵入要添加到數組中的新值,那麼我很抱歉地說,僅僅通過這兩個控件和綁定就不容易實現。這有點複雜。但簡單情況下的訣竅是,您需要一些地方來存儲值其他比您用來提供預先加載的值到NSComboBox的NSArrayController。

+0

我的意見,這個建議並沒有解決問題。正如問題所說:「我有一個ComboBox和一個TextField綁定到NSArrayController,第一個是名字,第二個是id,如果我改變了ComboBox中的選擇,我希望TextField中的值改變,反之亦然」。 所以問題是在nscombobox中選擇值,如「name」,並在NSTextView中顯示相對ID。在你的回答之後,nstextview將顯示與組合框中完全相同的東西。兩次相同的數據。 – sundsx