我有一个基本的Cocoa应用,其中包含BIT0
个。当文本视图失去焦点(即退出其第一响应者状态)时,我想清除其选择。
我的策略是扩展BIT6
并覆盖NSTextView
:
NSTextView
问题在于,同时调用resignFirstResponder()
和override func resignFirstResponder() -> Bool {
// Both result in the text view becoming first responder again:
clearSelection(nil)
setSelectedRange(NSRange(location: 0, length: 0))
return super.resignFirstResponder()
}
会使文本视图再次成为第一响应者。
有没有清除选择而不成为第一响应者的方法?
我也尝试覆盖clearSelection()
并暂时返回setSelectedRange()
,但这也不起作用。
答案 0 :(得分:0)
今天遇到了同样的问题并找到了解决方法
您可以在setSelectedRange
的委托方法NSTextView
中执行textDidEndEditing
,但这不会导致NSTextView
成为第一响应者。
class TextView: NSTextView {
init() {
self.delegate = self
....
}
....
}
extension TextView: NSTextViewDelegate {
public func textDidEndEditing(_ notification: Notification) {
setSelectedRange(NSMakeRange(string.count, 0))
}
}