我试图这样做,以便每次按下文本字段
它使NSTextView自动向下滚动到滚动视图中的最后一行
let range = NSMakeRange(textView.text.characters.count - 1, 0)
textView.scrollRangeToVisible(range)
我尝试了各种方法,但它从未向下滚动NSTextView中的文本
答案 0 :(得分:1)
您可以addLocalMonitorForEvents
向您的视图控制器发送.keyDown
个事件,并检查event.keyCode == 76
。
import Cocoa
class ViewController: NSViewController {
@IBOutlet var textview: NSTextView!
var keyDown: Any!
override func viewDidLoad() {
super.viewDidLoad()
keyDown = NSEvent.addLocalMonitorForEvents(matching: .keyDown) {
self.keyDown(with: $0)
return $0
}
}
override func keyDown(with event: NSEvent) {
if event.keyCode == 76 {
print("enter key pressed")
DispatchQueue.main.async {
self.textview.scrollRangeToVisible(NSRange(location: self.textview.string.count, length: 0))
}
}
}
deinit {
NSEvent.removeMonitor(keyDown)
}
}
如果您只需要在方法向textview添加行后将其向下滚动,只需将其添加到结尾:
DispatchQueue.main.async {
self.textview.scrollRangeToVisible(NSRange(location: self.textview.string.count, length: 0))
}