Откройте NSPopover в windowDidLoad

Я пытаюсь отобразить NSPopover в приложении Mac, когда открывается окно, чтобы дать пользователю инструкцию, но всплывающее окно не отображается.

Если я вызываю точно такую ​​же функцию нажатием кнопки, всплывающее окно успешно отображается, но когда я вызываю его в windowDidLoad, это не так.

Я вижу, что элемент управления, который я представляю, имеет границы, поэтому я не думаю, что это проблема. Я также проверил, что поведение всплывающего окна не является временным, поэтому оно не должно закрываться без вмешательства.

В моей функции я передаю некоторые переменные в пользовательский инициализатор, но в основном это так:

CustomViewController *instruction = [[CustomViewController alloc] init];
[instruction.popover showRelativeToRect:[aField bounds] ofView:aField preferredEdge:NSMaxXEdge];

Метод init просто вызывает следующее, а пользовательское представление и контроллер подключаются в NIB.

[super initWithNibName:@"InstructionalView" bundle:nil]

Кто-нибудь сталкивался с этим?


person DownUnder    schedule 04.08.2013    source источник
comment
не могли бы вы показать код, который фактически устанавливает свойство .popover?   -  person Michael Dautermann    schedule 04.08.2013
comment
Это свойство CustomViewController, и связь устанавливается в NIB. @property (assign) IBOutlet NSPopover *popover;. Мой CustomViewController является классом владельца файла NIB и является contentViewController всплывающего окна.   -  person DownUnder    schedule 04.08.2013


Ответы (1)


Вы программно выделяете и инициализируете свой объект CustomViewController, но всплывающее окно не имеет возможности загрузиться из пера до его отображения (в строке непосредственно после выделения и инициализации).

Между этими двумя строками принудительная загрузка через loadView, например:

[instruction loadView];

Вы также можете убедиться, что "instruction.popover" не равно нулю, когда вы пытаетесь отобразить его.

person Michael Dautermann    schedule 04.08.2013
comment
пытался добавить в loadView перед вызовом showRelativeToRect: но без разницы. Я также подтвердил, что всплывающее окно не равно нулю. - person DownUnder; 05.08.2013