2011-07-11 7 views
1

私はawakeFromNibメソッドで記入するNSArrayControllerを持っています。データは、id,nameおよびdescriptionのキーを有する。私は、NSArrayControllerにバインドされたComboBoxとTextFieldをIDの名前と2番目のIDで最初にバインドしました。私がComboBoxで選択を変更した場合は、TextFieldの値を変更したい、その逆の場合もあります。私はTextFieldとComboBoxバインディングのドキュメントを読んでいましたが、これを達成する方法を理解できませんでした。バインディングを持つNSComboBoxとNSTextField

答えて

1

NSComboBoxの値を入力するにはどこか別のが必要です。 NSArrayControllerはNSComboBoxに在庫値を提供するのには問題ありませんが、NSArrayControllerのcontentArrayにないかもしれないNSComboBoxに任意の値を入力することができます。

@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 

を次に実装に:私はちょうどこのようAppDelegateに単純な値を置くことで、すぐにモックアップすることができました

@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(あなたがNSComboBoxに入力しているようNSTextFieldは、文字ごとに文字を更新する場合はContinuously Updates Valueを確認してください)

NSTextField:

  • 値 - >アプリケーションDelegate.comboBoxValue(あなたがNSTextFieldに入力しているようNSComboBoxは文字ごとの文字を更新する場合はContinuously Updates Valueを確認してください)

あなたが入力した新しい値を配列に追加したい場合は、この2つのコントロールとバインディングだけでは簡単には実行できません。それはかなり複雑です。しかし、単純なケースのトリックは、NSComboBoxにあらかじめロードされた値を提供するために使用しているNSArrayControllerよりも、以外のの値を格納する場所が必要なことです。

+0

私の意見では、この提案は問題を解決しません。質問:「私はComboBoxとTextFieldをNSArrayControllerにバインドしています。最初に名前を付け、2番目にidを付けます。ComboBoxで選択を変更すると、TextFieldの値を変更したい、その逆。 問題はnscomboboxの "name"のような値を選択し、NSTextViewに相対IDを表示することです。あなたの答えに続いて、nstextviewはコンボボックスにあるものとまったく同じものを表示します。 2回同じデータを入力します。 – sundsx

関連する問題