我有一个基本的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()都会导致文本视图再次成为第一响应者。
有没有一种方法可以在不成为第一响应者的情况下清除选择?
我还试图重写acceptsFirstResponder并临时返回false,但也不起作用。
发布于 2018-11-09 20:14:20
今天遇到了同样的问题,并找到了解决方案
您可以在NSTextView的委托方法textDidEndEditing中执行setSelectedRange,它不会导致NSTextView成为第一响应者。
class TextView: NSTextView {
init() {
self.delegate = self
....
}
....
}
extension TextView: NSTextViewDelegate {
public func textDidEndEditing(_ notification: Notification) {
setSelectedRange(NSMakeRange(string.count, 0))
}
}https://stackoverflow.com/questions/52260742
复制相似问题