gpt4 book ai didi

cocoa - 如何清除 NSTextView 选择而不使其成为第一响应者?

转载 作者:行者123 更新时间:2023-12-03 16:45:21 26 4
gpt4 key购买 nike

我有一个基本的 Cocoa 应用程序,其中包含许多 NSTextView。当 TextView 失去焦点(即放弃其第一响应者状态)时,我想清除其选择。

我的策略是扩展 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() 都会导致 TextView 再次成为第一响应者。

有没有办法在不成为第一响应者的情况下清除选择?

我还尝试覆盖 acceptsFirstResponder 并暂时返回 false,但这也不起作用。

最佳答案

今天遇到同样的问题并找到解决方案

你可以在NSTextView的委托(delegate)方法textDidEndEditing中执行setSelectedRange,它不会导致NSTextView变成第一响应者。

class TextView: NSTextView {
init() {
self.delegate = self
....
}
....
}

extension TextView: NSTextViewDelegate {
public func textDidEndEditing(_ notification: Notification) {
setSelectedRange(NSMakeRange(string.count, 0))
}
}

关于cocoa - 如何清除 NSTextView 选择而不使其成为第一响应者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52260742/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com