【问题标题】:Editable NSTextField inside not .titled NSPanel内部可编辑的 NSTextField 不是 .titled NSPanel
【发布时间】:2020-11-15 05:53:18
【问题描述】:

我正在为 react-native-macos 搭建一座桥梁。我需要具有与 Spotlight 相同行为的 NSPanel。

我以编程方式在里面创建了 NSPanel 和 NSTextField。一切都按预期工作,但如果我将 NSPanel 更改为 not .titled - 文本字段将被禁用。

作品:

panel = NSPanel(contentRect: NSRect(x: 0, y: 0, width: 400, height: 40), styleMask: [
    .borderless,
    .nonactivatingPanel,
    .titled,  < ------- HERE
    .resizable,
  ], backing: .buffered, defer: true)

searchField = NSTextField()
searchField.delegate = self
searchField.isBezeled = false
searchField.font = NSFont.systemFont(ofSize: 20, weight: .light
searchField.drawsBackground = false
searchField.placeholderString = "Query here..."
searchField.setFrameSize(NSMakeSize(400, 40)

不起作用:

panel = NSPanel(contentRect: NSRect(x: 0, y: 0, width: 400, height: 40), styleMask: [
    .borderless,
    .nonactivatingPanel,
    .resizable,
  ], backing: .buffered, defer: true)

searchField = NSTextField()
searchField.delegate = self
searchField.isBezeled = false
searchField.font = NSFont.systemFont(ofSize: 20, weight: .light
searchField.drawsBackground = false
searchField.placeholderString = "Query here..."
searchField.setFrameSize(NSMakeSize(400, 40)

如何使用隐藏的标题栏和可编辑的 NSTextField 执行 NSPanel?

【问题讨论】:

    标签: objective-c swift macos nswindow nspanel


    【解决方案1】:

    我相信.borderless.titled 是相互排斥的。换句话说,当您在顶部代码中指定.borderless 时,.titled 会覆盖它,您最终会得到一个正常处理事件的“普通窗口”。在第二个代码中,.borderless 实际注册了,你最终得到了一个无边框的窗口子类,它处理事件的方式完全不同。但这一切都是题外话。

    假设您可以要求高于 macOS 10.10,您可以使用以下代码:

    panel = NSPanel(contentRect: NSRect(x: 0, y: 0, width: 400, height: 40), styleMask: [
        .titled,
        .fullSizeContentView,
        ], backing: .buffered, defer: true)
    panel.titleVisibility = .hidden
    panel.titlebarAppearsTransparent = true
    panel.makeFirstResponder(searchField)
    panel.makeKeyAndOrderFront(nil)
    

    这将获得一个正常处理事件的全尺寸标题面板(它允许其视图成为关键)。然后在显示面板之前,隐藏标题栏并使其透明。请注意,要让标题栏完全消失,您不需要使用任何 .resizable.closable.miniaturizable 选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-24
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多