Ответ 1
Вы можете использовать [[self view] window]
У меня есть приложение с базовыми данными на основе документов. В главном окне документа есть несколько видов, каждый из которых управляется собственным пользовательским NSViewController
, который при необходимости переключается. Я хочу, чтобы каждый из этих контроллеров представлений мог вытащить пользовательский модальный лист из окна документа. Однако, поскольку представления являются отдельными, а не в MyDocument
nib
, я не могу связать представление с окном документа в IB. Это означает, что когда я вызываю
[NSApp beginSheet: sheetWindow modalForWindow: mainWindow modalDelegate: self didEndSelector: @selector(didEndSheet:returnCode:contextInfo:) contextInfo: nil];
Im подает нуль для mainWindow
, и поэтому лист выглядит отсоединенным.
Любые предложения?
Большое спасибо
Вы можете использовать [[self view] window]
Действительно, это self.view.window
(Swift).
Это может быть ноль в viewDidLoad() и viewWillAppear(), но он будет правильно установлен к тому времени, когда вы доберетесь до viewDidAppear().
Если ваш контроллер может получить доступ к подклассу NSDocument, вы можете использовать - windowForSheet
больше о Тиме Клоссе ответ:
-(void)viewDidAppear
{
self.view.window.title = @"title-viewDidAppear"; //this only works when and after viewDidAppeer is called
}
-(void)viewWillDisappear
{
self.view.window.title = @"title-viewWillDisappear"; //this only works before and when viewWillDisappear is called
}
Одна проблема с другими ответами (то есть, просто смотря на self.view.window
) заключается в том, что они не учитывают случай, когда, когда представление скрыто, его свойство window
будет nil
. Представление может быть скрыто по многим причинам (например, оно может быть в одном из невыбранных представлений в представлении с вкладками).
Следующее (быстрое) расширение предоставит windowController
для NSViewController
путем NSViewController
иерархии контроллера представления, из которой затем может быть проверено свойство window
:
public extension NSViewController {
/// Returns the window controller associated with this view controller
var windowController: NSWindowController? {
return ((self.isViewLoaded == false ? nil : self.view)?.window?.windowController)
?? self.parent?.windowController // fallback to the parent; hidden views like those in NSTabView don't have a window
}
}