如何使以编程方式添加的 NSTextView 处于活动状态?
How to make a NSTextView, that is added programmatically, active?
我正在制作一个应用程序,用户可以在其中单击 window 上的任意位置,并在鼠标位置添加 NSTextView
。我已经使用下面的代码使用它,但是在将它添加到视图(父视图)后我无法使其处于活动状态(聚焦)。我必须单击 NSTextView
才能激活它,但这不是我想要的。我希望它在添加到父视图时自动变为活动状态。
我的 ViewController
中用于将 NSTextView
添加到其视图中的代码:
private func addText(at point: NSPoint) {
let textView = MyTextView(frame: NSRect(origin: point, size: CGSize(width: 150.0, height: 40.0)))
view.addSubview(textView)
}
MyTextView
class 如下所示:
class MyTextView: NSTextView {
override var shouldDrawInsertionPoint: Bool {
true
}
override var canBecomeKeyView: Bool {
true
}
override func viewWillDraw() {
isHorizontallyResizable = true
isVerticallyResizable = true
insertionPointColor = .red
drawsBackground = false
isRichText = false
allowsUndo = true
font = NSFont.systemFont(ofSize: 40.0)
}
}
此外,我希望它在单击其他一些元素(视图)时失去焦点(变为非活动状态)。现在,一旦 NSTextView
变为活动状态,无论我单击其他什么元素,它都会保持活动状态,除非我单击空 space 以创建另一个 NSTextView
.
我已经多次浏览 Apple 文档,但我觉得我遗漏了什么。任何帮助将不胜感激。
获取 NSViewController
的 view
的 NSWindow
实例并调用 makeFirstResponder
将文本视图作为参数传递。
失去焦点调用 makeFirstResponder
传递 nil
。
我正在制作一个应用程序,用户可以在其中单击 window 上的任意位置,并在鼠标位置添加 NSTextView
。我已经使用下面的代码使用它,但是在将它添加到视图(父视图)后我无法使其处于活动状态(聚焦)。我必须单击 NSTextView
才能激活它,但这不是我想要的。我希望它在添加到父视图时自动变为活动状态。
我的 ViewController
中用于将 NSTextView
添加到其视图中的代码:
private func addText(at point: NSPoint) {
let textView = MyTextView(frame: NSRect(origin: point, size: CGSize(width: 150.0, height: 40.0)))
view.addSubview(textView)
}
MyTextView
class 如下所示:
class MyTextView: NSTextView {
override var shouldDrawInsertionPoint: Bool {
true
}
override var canBecomeKeyView: Bool {
true
}
override func viewWillDraw() {
isHorizontallyResizable = true
isVerticallyResizable = true
insertionPointColor = .red
drawsBackground = false
isRichText = false
allowsUndo = true
font = NSFont.systemFont(ofSize: 40.0)
}
}
此外,我希望它在单击其他一些元素(视图)时失去焦点(变为非活动状态)。现在,一旦 NSTextView
变为活动状态,无论我单击其他什么元素,它都会保持活动状态,除非我单击空 space 以创建另一个 NSTextView
.
我已经多次浏览 Apple 文档,但我觉得我遗漏了什么。任何帮助将不胜感激。
获取 NSViewController
的 view
的 NSWindow
实例并调用 makeFirstResponder
将文本视图作为参数传递。
失去焦点调用 makeFirstResponder
传递 nil
。