Поповер не привязан к якорю

Я хотел бы показать всплывающее окно со стрелкой на кнопке, которая является частью моего представления (например, кнопка находится на моем основном представлении). Я делаю это в редакторе раскадровки Interface Builder (перетаскивание с помощью Ctrl от кнопки до просмотра содержимого всплывающего окна). Всплывающее окно отображается, но не привязано к кнопке. То, что я нашел для кнопок на всплывающем окне панели инструментов, показывает, что они прикреплены к кнопке, как и ожидалось. Для этой кнопки установлено свойство привязки перехода. Версия Xcode 7.0.1 (7A1001).

Редактировать: изображения того, что я делаю: 1) Раскадровка. Сначала я перетаскиваю ctrl с кнопки панели инструментов на первый контроллер, затем перетаскиваю ctrl на второй контроллер со второй кнопки. введите здесь описание изображения 2) Правильно прикрепленный всплывающий элемент введите описание изображения здесь 3) Поповер не прикрепляется к кнопке в поле зрения. введите здесь описание изображения


person Alexander B    schedule 06.10.2015    source источник
comment
Пожалуйста, приложите пример кода. Спасибо   -  person Marek H    schedule 06.10.2015
comment
@xhruso00 xhruso00 Я делаю это в Interface Builder, кода еще нет. Я добавляю контроллер представления для всплывающего окна в раскадровку, а затем подключаю его, используя переход всплывающего окна с кнопкой на моем представлении, что это.   -  person Alexander B    schedule 06.10.2015
comment
Если вы не предоставляете образец, пожалуйста, прикрепите изображения к вашему коду и покажите мне, что является правильным поведением, а что нет. Это быстрее, чем публиковать непринятый ответ. Я трачу свое время на вас (бесплатно).   -  person Marek H    schedule 06.10.2015
comment
@MarekH создал пустой тестовый проект и добавил изображения к вопросу. Спасибо за предложение.   -  person Alexander B    schedule 06.10.2015
comment
Добавлен ответ. Похоже, отчет об ошибке должен быть заполнен. Я даже дважды проверил исходный код раскадровки (что правильно)   -  person Marek H    schedule 06.10.2015


Ответы (1)


Ты прав. Следующий метод показывает, что представление отправки равно нулю, и по умолчанию для всплывающего окна используется представление содержимого окна.

Поэтому, чтобы исправить, просто проверьте, является ли positioningView нулевым. если да, установите его как кнопку (создайте для него выход).

Добавьте следующий метод в свой viewController

- (void)presentViewController:(NSViewController *)viewController asPopoverRelativeToRect:(NSRect)positioningRect ofView:(NSView *)positioningView preferredEdge:(NSRectEdge)preferredEdge behavior:(NSPopoverBehavior)behavior
{
  //do custom implementation (workaround)
  [super presentViewController:viewController asPopoverRelativeToRect:positioningRect ofView:positioningView preferredEdge:preferredEdge behavior:behavior];
}
person Marek H    schedule 06.10.2015
comment
Одна проблема, которую я вижу, заключается в том, как определить, после какой кнопки этот метод вызывается в первую очередь (у меня есть несколько кнопок в реальном приложении). - person Alexander B; 06.10.2015
comment
проверьте, какой из них нажат (состояние). Не забудьте проверить, что один из абонентов может быть toolbaritem. Это вы должны проверить с XIBs. - person Marek H; 06.10.2015