如何在 Swift 中为 NSTextView 设置第一响应者?
How to set first responder for NSTextView in Swift?
编辑:在 macOS 项目中
我有一个简单的 ViewController,我在状态项菜单应用程序上显示为弹出窗口。
我用 NSTableView 更改视图文本的文本,具体取决于单击的项目。我使用的代码与此类似:
mainTextField.insertText(newStr, replacementRange: theRange)
(我使用 insertText 的目的是将更改记录在撤消管理器中)
然后我突出显示文本:
// create the new NSRange
let range = NSRange(location: startRange, length: newStrLength)
// select the range in field
mainTextField.selectedRange = range
一切正常,除了文本被高亮显示但带有浅灰色而不是通常的天蓝色,表明控件不是第一响应者。当我单击该字段时,选择消失了。
实际上我希望 NSTextView 成为第一响应者,这样我就可以直接复制所选文本。
编辑:如果我按键盘上的 Tab 键,我会让 textView 成为第一响应者(并且灰色选择变成标准的天蓝色)。
更正答案
在 AppKit 中,您需要:
if mainTextField.acceptsFirstResponder {
mainTextField.window?.makeFirstResponder(mainTextField)
}
在这种情况下,不检查 acceptsFirstResponder
可能是安全的,但也无妨。
原始答案(UIKit
)
您需要致电mainTextField.becomeFirstResponder()
。
编辑:在 macOS 项目中
我有一个简单的 ViewController,我在状态项菜单应用程序上显示为弹出窗口。
我用 NSTableView 更改视图文本的文本,具体取决于单击的项目。我使用的代码与此类似:
mainTextField.insertText(newStr, replacementRange: theRange)
(我使用 insertText 的目的是将更改记录在撤消管理器中)
然后我突出显示文本:
// create the new NSRange
let range = NSRange(location: startRange, length: newStrLength)
// select the range in field
mainTextField.selectedRange = range
一切正常,除了文本被高亮显示但带有浅灰色而不是通常的天蓝色,表明控件不是第一响应者。当我单击该字段时,选择消失了。
实际上我希望 NSTextView 成为第一响应者,这样我就可以直接复制所选文本。
编辑:如果我按键盘上的 Tab 键,我会让 textView 成为第一响应者(并且灰色选择变成标准的天蓝色)。
更正答案
在 AppKit 中,您需要:
if mainTextField.acceptsFirstResponder {
mainTextField.window?.makeFirstResponder(mainTextField)
}
在这种情况下,不检查 acceptsFirstResponder
可能是安全的,但也无妨。
原始答案(UIKit
)
您需要致电mainTextField.becomeFirstResponder()
。