是否可以将NSTextView自动滚动到swift xcode中的最后一行

时间:2017-11-18 02:05:48

标签: swift

我试图这样做,以便每次按下文本字段

它使NSTextView自动向下滚动到滚动视图中的最后一行

let range = NSMakeRange(textView.text.characters.count - 1, 0)
textView.scrollRangeToVisible(range)

我尝试了各种方法,但它从未向下滚动NSTextView中的文本

1 个答案:

答案 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))
}