Замена подпредставлений с NSBox
Я хотел бы использовать NSBox *dynamicSection, чтобы заменить содержимое поля другим представлением в зависимости от выбранного индекса и элемента управления NSPopUpButton. Приведенный ниже метод получает NSPopUPButton в качестве объекта и использует переключатель регистра для динамической установки представления и заголовка для блока.
@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;
}
}
}
Он распознает правильный индекс и печатает заголовок в журнале, однако он не правильно переключает представление при выборе. Какие-либо предложения?
Спасибо!
1 ответ
Вы, кажется, не добавляете NSBox
как подвид мнения, и я не могу сказать из вопроса, где он должен быть добавлен.
Другие вопросы:
- Вы должны избежать утечки памяти, освободив выделенные
NSBox
как только вы добавили его как подпредставление, оно будет сохранено. - Вам, вероятно, не нужно держать
dynamicSection
как ивар класса. - У вас слишком много повторного кода:
Сделать это до switch
:
dynamicSection = [[NSBox alloc] init];
[dynamicSection setTitle:[self returnSectionTitle:index]];
и добавьте вид после switch
:
[someView addSubview:dynamicSection];
[dynamicSection release];