我有一个Cocoa应用程序显示"快速搜索"窗口类似于Spotlight。该窗口包含一个视觉效果视图,位于NSTextField
内。文本字段在窗口的整个宽度上延伸。
我希望能够通过拖动文本字段的空白区域来移动窗口。在文本字段中拖动文本时,应该使用正常的编辑(即选择)行为。
理论上,按窗口移动窗口很容易:
window.isMovableByWindowBackground = true
但是,此行为不适用于NSTextField
,因为它会拦截拖动并尝试选择文本。
Spotlight以某种方式做到了。这是一个例子:
我认为没有成功的几个选项:
hitTest:
返回nil
mouseDown|Up|Dragging:
并转发至superview
答案 0 :(得分:3)
作为参考,我终于找到了一种方法:
第1部分:让NSTextField以其内容增长/缩小
覆盖intrinsicContentSize
并衡量其内容:
private func measure(_ string:NSAttributedString) -> NSSize
{
let cell = NSTextFieldCell(textCell: stringValue)
cell.attributedStringValue = string
return cell.cellSize
}
第2部分:视图设置
第3部分:所有细节
iBeam
光标使其显示为文本字段那就是它。