gpt4 book ai didi

cocoa - 使 NSWindow.isMovableByWindowBackground 与 NSTextField 一起使用

转载 作者:行者123 更新时间:2023-12-03 16:30:32 24 4
gpt4 key购买 nike

我有一个 Cocoa 应用程序,它显示一个类似于 Spotlight 的“快速搜索”窗口。该窗口包含一个视觉效果 View 和一个 NSTextField 内部。文本字段延伸到窗口的整个宽度。

我希望能够通过在文本字段的空白区域内拖动来移动窗口。当在文本字段中的文本上拖动时,应使用正常的编辑(即选择)行为。

理论上,通过背景移动窗口很容易:

window.isMovableByWindowBackground = true

但是,此行为不适用于 NSTextField,因为它会拦截拖动并尝试选择文本。

Spotlight 以某种方式做到了这一点。这是一个例子:

Spotlight example

我考虑过但没有成功的几个选项:

  • 尝试覆盖 hitTest: 返回 nil
  • 尝试覆盖mouseDown|Up|Dragging:并转发到superview
  • 尝试使用自动布局来缩小文本字段以紧紧包裹其文本(无法解决这个问题)

最佳答案

供引用,我终于找到了方法:

第 1 部分:让 NSTextField 随其内容增大/缩小

覆盖intrinsicContentSize并测量其内容:

private func measure(_ string:NSAttributedString) -> NSSize
{
let cell = NSTextFieldCell(textCell: stringValue)
cell.attributedStringValue = string

return cell.cellSize
}

第 2 部分: View 设置

  • 在文本字段后面添加占位符 View
  • 设置自动布局以使占位符 View 放大和缩小

第三部分:所有细节

  • 设置占位符 View 以使用 iBeam 光标使其看起来像文本字段
  • 如果用户点击占位符 View ,则使文本字段成为第一响应者

就是这样。

关于cocoa - 使 NSWindow.isMovableByWindowBackground 与 NSTextField 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46252769/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com