1

NSBox * dynamicSectionを使用して、選択したインデックスとNSPopUpButtonコントロールに応じて、ボックスのコンテンツを別のビューに置き換えたいと思います。以下のメソッドは、NSPopUPButtonをオブジェクトとして受け取り、caseスイッチを使用してボックスのビューとタイトルを動的に設定します。

@interface AppDelegate : NSObject <NSApplicationDelegate> {
IBOutlet NSTextField *dynamicTitle;
NSMutableString *title;
NSBox *dynamicSection;
NSView *Sect1_View;
NSView *Sect2_View;
NSView *Sect3a_View;
NSView *Sect3b_View;
NSView *Sect3c_View;
NSView *Sect4_View;
}
@property (assign) IBOutlet NSWindow *window;
@property (assign) IBOutlet NSBox *dynamicSection;
@property (assign) IBOutlet NSPopUpButton *menuOptions;

}

@implementation {

- (IBAction)menuSelected:(NSPopUpButton *)sender {

NSInteger index = [sender indexOfSelectedItem];
NSLog(@"Selected button index is %ld", index);



switch (index) {
    case 0:
        dynamicSection = [[NSBox alloc] init];
        [dynamicSection setTitle:[self returnSectionTitle:index]];
        [dynamicSection setContentView:Sect1_View];
         NSLog(@"%@",[self returnSectionTitle:index]);
        break;
    case 1:
        dynamicSection = [[NSBox alloc] init];
        [dynamicSection setTitle:[self returnSectionTitle:index]];
        [dynamicSection setContentView:Sect2_View];
        break;
    case 2:
        dynamicSection = [[NSBox alloc] init];
        [dynamicSection setTitle:[self returnSectionTitle:index]];
        [dynamicSection setContentView:Sect3a_View];
        break;
    case 3:
        dynamicSection = [[NSBox alloc] init];
        [dynamicSection setTitle:[self returnSectionTitle:index]];
        [dynamicSection setContentView:Sect3b_View];
        break;
    case 4:
        dynamicSection = [[NSBox alloc] init];
        [dynamicSection setTitle:[self returnSectionTitle:index]];
        [dynamicSection setContentView:Sect3c_View];
        break;
    case 5:
        dynamicSection = [[NSBox alloc] init];
        [dynamicSection setTitle:[self returnSectionTitle:index]];
        [dynamicSection setContentView:Sect4_View];
        break;

    default:
        break;
  }

}

}

正しいインデックスを認識し、タイトルをログに出力していますが、選択時にビューが正しく切り替わりません。助言がありますか?

ありがとう!

4

1 に答える 1

0

ビューのサブビューとしてを追加しているようには見えNSBoxず、どこに追加すべきかという質問からはわかりません。

その他の問題:

  1. NSBoxサブビューとして追加したら、割り当てられたメモリを解放してメモリリークを回避する必要があります。これは、ビューがメモリリークを保持するためです。
  2. あなたはおそらくdynamicSectionクラスのivarとして保持する必要はありません。
  3. 繰り返されるコードが多すぎます:

の前にこれを行うswitch

dynamicSection = [[NSBox alloc] init];
[dynamicSection setTitle:[self returnSectionTitle:index]];

switch:の後にビューを追加します

[someView addSubview:dynamicSection];
[dynamicSection release];
于 2012-07-05T20:55:37.240 に答える