我在做一座为反应而建的桥梁--macos。我需要和聚光灯一样行为的NSPanel。
我以编程的方式在里面创建了NSPanel和NSTextField。一切正常工作,但如果我将NSPanel更改为非.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)如何在NSPanel中使用隐藏的标题栏和可编辑的NSTextField?
发布于 2020-07-26 19:29:32
我相信.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选项。
https://stackoverflow.com/questions/63089253
复制相似问题