2014-02-06 29 views
0

在響應用戶事件,我想:下一次NSView -layout發生後,我該怎麼做?

  • 添加一個新的NSView的窗口,然後
  • 表現出NSPanel定位只是視圖下方

我各佔一半這樣做。我可以添加一個新的子視圖,容器視圖的-updateConstraints標識它並添加正確的佈局約束,以便下次執行佈局時,它將正確定位在窗口中。另外,我有一個將面板放在屏幕上的NSWindowController子類。

不幸的是,有一個訂購問題。我的面板的控制器只是看着新的NSView的frame屬性來決定放置在哪裏,但在主循環的迭代過程中,-layout方法還沒有被調用,所以它仍然位於(0,0)。

(如果我這兩個的功能件分開,並且需要爲「添加視圖」和「創建面板」兩個單獨的用戶事件,則該面板被正確地定位在所述視圖的下面。)

有一種方法將NSPanel附加到NSView,就好像使用佈局約束?或者有沒有辦法說「做這個(窗口控制器的東西),但只有在下一個-layout調用」?

回答

0

只要在您添加它和它的約束時在您的NSView的超級視圖上調用-layoutSubtreeIfNeeded,所以它會立即佈局,然後添加面板。

或者使用NSPopOver,雖然這些都是以某種方式繪製的,您可能不想要。

+0

完美!謝謝! – user3277676

+0

是的,我一直在考慮NSPopOver的' - showRelativeToRect:ofView:preferredEdge:'方法。過去我使用過NSPopOver,但在這個特殊情況下我不需要使用語音泡泡三角。 – user3277676