Подкласс NSView для NSMenuItem - PullRequest
       2

Подкласс NSView для NSMenuItem

1 голос
/ 13 сентября 2011

Я хочу создать подпредставление NSView и связать его с MenuView.xib.

У меня будет:

- MenuView.m
- MenuView.h
- MenuView.xib

в xcode Я создал xib и установил в качестве пользовательского класса мой 'MenuView'. Теперь я хотел бы добавить мой новый вид программно с помощью команды, подобной этой:

NSView *vv = [[MenuView alloc] initWithFrame:CGRectMake(0, 0, 300, 200)];

NSMenuItem *newItem = [[NSMenuItem alloc] initWithTitle:@"title" action:nil keyEquivalent:@""];
[newItem setView:vv];

но я просто вижу пустое пространство без содержимого. Как я могу сказать классу MenuView.m визуализировать с файлом MenuView.xib? Это неправильно?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 14 сентября 2011

Используйте NSViewController, он предназначен для загрузки представлений из файла пера. В файле пера установите NSViewController в качестве класса Владелец файла , а затем установите view выход Владелец файла , чтобы он указывал на ваш взгляд в пине.

Тогда вы можете просто сделать это:

NSViewController* viewController = [[NSViewController alloc] initWithNibName:@"YourNibName" bundle:nil];
YourCustomView* view = [viewController view]; //this loads the nib
[viewController release];
//do something with view
0 голосов
/ 14 сентября 2011

Чтобы загрузить представление из пера (адаптировано из другого ответа моего):

NSNib *nib = [[NSNib alloc] initWithNibNamed:@"MenuView" bundle:nil];
NSArray *nibObjects;
if (![nib instantiateNibWithOwner:self topLevelObjects:&nibObjects]) return nil;

NSMenuItem *item = nil;

for (id obj in nibObjects)
    if ([obj isKindOfClass:[NSMenuItem class]]) {
        item = obj;
        break;
    }

[someView insertSubview:item];

Если вы хотите, чтобы в качестве владельца файла было указано что-то отличное от self, измените параметр на instantiateNibWithOwner:.

...