2014-02-06 6 views
0

В ответ на пользовательское событие, я хочу:Как мне сделать что-то после следующего прогона NSView?

  • добавить новый NSView к окну, а затем
  • показать NSPanel расположен чуть ниже этой точки зрения

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

К сожалению, у вас возникла проблема с заказом. Контроллер моей панели просто смотрит на новое свойство NSView frame, чтобы решить, куда его поместить, но во время этой итерации главного цикла событий метод -layout еще не вызывается, поэтому он все еще находится в позиции (0,0).

(Если бы я разделить эти две функциональные части, и требуют двух отдельных пользовательских событий для «добавить мнение» и «создать панель», то панель правильно расположена ниже точки зрения.)

Есть ли способ для присоединения NSPanel к NSView, как будто с ограничением макета? Или есть способ сказать «сделайте это (материал контроллера окна), но только после следующего -layout звоните«?

ответ

0

Просто вызовите -layoutSubtreeIfNeeded в вашем представлении NSView, как только вы добавите его и его ограничения, так что он будет выкладываться немедленно, а затем добавить панель.

Или используйте NSPopOver, хотя они нарисованы определенным образом, и вы, возможно, не захотите этого.

+0

Отлично! Благодаря! – user3277676

+0

И да, я, должно быть, думал о методе '- showRelativeToRect :SPView: preferredEdge:' NSPopOver. Я использовал NSPopOver в прошлом, но в этом конкретном случае я не хочу треугольника речи-пузыря. – user3277676