macos - NSTextView 监听插入符位置变化

标签 macos cocoa key-value-observing nstextfield nstextview

如何获取 NSTextView 插入符位置更改的回调?

我尝试过 KVO

[textView addObserver:self forKeyPath:@"selectedRange" options:NSKeyValueObservingOptionNew context:NULL];

但是当我使用箭头键或鼠标移动时,我没有得到回调...可能是因为范围是一个结构,它会修改其成员(当文本更改时我只得到回调)

但是如何监控插入符位置变化?

最佳答案

Swift 4 版本:

public func textViewDidChangeSelection(_ notification: Notification) {
   guard let textView = notification.object as? NSTextView,
         let string = textView.textStorage?.string else {
      return
   }

   if let nsRange = textView.selectedRanges.first as? NSRange,
      let range = Range(nsRange, in: string) {
      print(nsRange)
      print(range.lowerBound.encodedOffset, range.upperBound.encodedOffset)
   }
}

关于macos - NSTextView 监听插入符位置变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31985868/

相关文章:

ios - 替换 NSPredicate 中的变量

objective-c - 新的 NSNumber 文字

objective-c - 如果我写一个自定义属性的getter方法,如果getter通过访问另一个对象的值返回一个值,KVO是否仍然运行?

iphone - 键值编码

objective-c - 使用 Array 观察键值不做任何事情

python - 在 OSX : symbol not found _mysql_affected_rows 上使用 MySQLdb 时出现问题

linux - Ghostscript:如何包含它过去包含的 Apple ImageWriter 驱动程序?

xcode - 如何使用 Xcode 工具栏中的菜单进行分段控制

xml - 下载多个文件会将相同的数据写入所有文件

objective-c - 如何在 NSCollectionView 中插入水平条?