У меня есть xib-файл с только NSPanel в нем, я пытаюсь показать эту панель как модальный лист (с beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo:
). Владелец файла для этого xib - это класс контроллера MyController, который имеет IBOutlet для NSPanel.Как загрузиться с xib? (MacOSx)
То, что я ищу что-то вроде:
...
MyController *controller = [[MyController alloc] init];
[NSApp beginSheet:controller.panel modalForWindow:[NSApp mainWindow] modalDelegate:controller didEndSelector:nil contextInfo:nil];
...
Вопрос: должны MyController наследовать от NSWindowController
или NSObject
?. Я попробовал NSWindowController
и initWithWindowNibName:
, но выход до NSPanel
всегда равен нулю.
Thanks
NSWindowController будет лениво загрузить файл XIB, когда его сбруя «окно» называется. Если вы подклассифицируете оконный контроллер, попробуйте удалить панель и воспользуйтесь встроенной оконной розеткой. Затем, когда вы вызываете аксессуар для представления листа, будет загружен XIB. Обработка памяти объектов верхнего уровня из [NSBundle loadNibNamed: @ "XibName" owner: self] сложна. NSWindowController обрабатывает все это для вас. Я бы рекомендовал использовать его. Кроме того, свойство инспектора, которое вы хотите отключить, или окно «Visible At Launch». –
Как NSWindowCntroller знает, что xib загружать при доступе к свойству «окна»? –
при инициализации NSWindowController вы указываете имя или путь к nib. Вот как он знает, что пить для загрузки. – JWWalker