如何在Swift中为NSTextView设置第一响应者?

时间:2017-03-10 21:16:01

标签: swift xcode macos-sierra nstextview

编辑:在macOS项目中

我有一个简单的ViewController,我在状态项菜单应用程序上显示为popover。

我使用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变为第一响应者(并且灰色选择变为标准天蓝色)。

1 个答案:

答案 0 :(得分:5)

更正的答案

在AppKit中,您需要:

if mainTextField.acceptsFirstResponder {
    mainTextField.window?.makeFirstResponder(mainTextField)
}

在这种情况下,不检查acceptsFirstResponder可能是安全的,但它也不会受到伤害。

原始答案(UIKit

您需要致电mainTextField.becomeFirstResponder()