【问题标题】:Move window by dragging background (movableByWindowBackground)通过拖动背景移动窗口(movableByWindowBackground)
【发布时间】:2015-01-23 05:03:27
【问题描述】:

我有一个窗口,我希望用户能够通过拖动窗口内容中的任意位置(不仅仅是标题栏)来移动它。我知道这可以通过NSWindow movableByWindowBackground 方法完成,但是这似乎无法单独工作。

我 gather 认为覆盖 NSView mouseDownCanMoveWindow 可能是必要的。但我不能轻易地为所有父视图(拆分视图等)做到这一点。使它成为一个有纹理的窗口并没有帮助。毫不奇怪,将NSWindow 子类化以覆盖isMovableByWindowBackground 也无济于事。

真的有必要对窗口中的所有父视图进行子类化以使其工作吗?

【问题讨论】:

标签: macos cocoa nswindow


【解决方案1】:

在 OS X 10.11 上,将 NSWindow 的属性 movableByWindowBackground 设置为 YES 有效。

不再需要为此行为进行子类化。

【讨论】:

  • 根据我的经验,情况并非如此。我有一个覆盖窗口的 NSSplitView 并且我已经设置了该属性。窗口不能从背景区域拖动。我正在针对 10.11 构建,我的部署目标是 10.11+
  • @Bryan 考虑用 Apple 记录一个针对 NSSplitView 的错误;听起来未处理的鼠标事件没有像预期的那样通过NSResponder 链传递。
  • 我会说这是正确的。我在 splitView 中覆盖了 -mouseDownCanMoveWindow,返回 YES,这解决了问题。
【解决方案2】:

在 NSSplitView 中添加:

override var mouseDownCanMoveWindow: Bool {
    return true
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多