Как загрузить файл пера из кода? - PullRequest
4 голосов
/ 15 мая 2011

Я создал собственное представление в конструкторе интерфейсов с несколькими кнопками в нем.Я создал класс в коде для него как «Владелец файлов» для подключения кнопок к методам действий.

Как тогда использовать этот класс?

Я не могу просто так сделать...

StartScreen *ss = [[StartScreen alloc] initWithFrame: ...];
[self.window.contentView addSubView: ss];
...

, потому что это создает только пустое представление.(конечно: класс StartScreen еще ничего не знает о файле пера.)

Я хочу сделать что-то вроде:

StartScreen *ss = LoadCustomViewFromNib(@"StartScreen");
[self.window.contentView addSubView: ss];

или, может быть, мне нужно что-то сказатькак

[self iWannaBeANibWithName: @"StartScreen"];

в конструкторе StartScreen?

просьба помочь ... (кстати, я разрабатываю для Mac OS X 10.6)

Ответы [ 2 ]

4 голосов
/ 16 мая 2011

Один из вариантов - сделать StartScreen подклассом NSViewController, возможно, изменив его имя на StartScreenController.Это потенциально более модульное решение, если у вас есть IBActions в вашем nib-файле и / или вы хотите поместить управляющий код представления в его собственный класс.

  1. Объявите StartScreenController как подклассNSViewController
  2. Объявите IBOutlets в StartScreenController при необходимости
  3. Установите класс владельца файла пера StartScreenController
  4. Подключите владельца файла view розеткак объекту просмотра и другим выходам, если необходимо

Затем:

StartScreenController *ss = [[StartScreenController alloc] initWithNibName:@"nibname" bundle:nil];    
[self.window.contentView addSubView:ss.view];
…

Если вы не используете сборщик мусора, не забудьте выпустить ss, когда онбольше не нужен.

2 голосов
/ 15 мая 2011

Функции загрузки пера являются частью класса NSBundle. Вы можете использовать это так ...

@implementation StartScreen
- (id) init {
    if ((self = [super init])) {
        if (![NSBundle loadNibNamed:@"StartScreen" owner:self])
            // error
        // continue initializing
    }
    return self;
}

См. NSBundle Дополнения ссылка .

...