在下一次NSView -layout发生后我该怎么办?

时间:2014-02-06 01:35:53

标签: macos cocoa nsview nswindowcontroller nspanel

为了回应用户事件,我想:

  • 向窗口添加新的NSView,然后
  • 显示位于该视图正下方的NSPanel

我完成了这一半。我可以添加一个新的子视图,容器视图-updateConstraints识别它并添加正确的布局约束,以便下次执行布局时,它在窗口中正确定位。另外,我有一个NSWindowController子类,它将面板放在屏幕上。

不幸的是,这是一个订购问题。我的面板控制器只是查看新的NSView的frame属性来决定放置它的位置,但在主事件循环的迭代过程中,-layout方法没有&#39已被召唤,所以它仍然位于(0,0)。

(如果我将这两个功能分开,并且需要两个单独的用户事件,用于"添加视图"以及"创建面板",则面板正确定位在视图下方。 )

有没有办法将NSPanel附加到NSView,就像使用布局约束一样?或者有没有办法说"这样做(窗口控制器的东西),但只能在下一个-layout电话"?

之后

1 个答案:

答案 0 :(得分:0)

只要添加它及其约束,就在NSView的超级视图上调用-layoutSubtreeIfNeeded,这样它就会立即布局,然后添加面板。

或者使用NSPopOver,虽然那些以某种方式绘制,你可能不希望这样。