cocoa - 监听 NSTextView 中行的删除

标签 cocoa notifications nsnotificationcenter nstextview

如何检测 NSTextView 中的一行(即“\n”字符)被删除?我可以使用 textView:doCommandBySelector: 轻松监听新行并监听 "insertNewLine:"。 (参见 here )我还可以使用相同的方法检测字符的删除,但改为监听 "deleteBackward:"。但是,我不确定如何找出正在删除的字符,因此仅在删除“\n”字符时才执行操作。谁能指出我正确的方法来做到这一点?

最佳答案

解决您的问题并不像听“deleteLine:”方法那么简单,因为正如您发现的那样,没有一个方法。最可能的最佳方法是执行以下操作:

  1. 创建一个 NSTextViewDelegate(如果您还没有)
  2. 实现 -textView:shouldChangeTextInRanges:replacementStrings:
  3. 通过调用 NSString 的 lineRangeForRange:– getLineStart:end:contentsEnd:forRange: 检查受影响的范围是否对应于整行
  4. (注意:您可以通过调用 NSString *text = myTextView.textStorage.string; 来访问 NSTextView 的 NSString)
  5. (另一个重要说明:不要专门查找“\n”字符,因为行可以由其他字符终止,例如“\r”、U+2028(Unicode 行分隔符)、U+2029(Unicode 段落分隔符) )等)
  6. (还有一个重要提示:不要忘记在 -textView:shouldChangeTextInRanges:replacementStrings: 中返回 YES 以允许进行更改。

我希望这会有所帮助。

关于cocoa - 监听 NSTextView 中行的删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35110047/

相关文章:

ios - 在 iOS 7 中使用新的格式字符串说明符配置字典(复数支持)

wordpress - 如何禁用 Plesk 12.0.18 更新通知(特别是对于 WordPress 和客户)

android - 点击后删除通知

iphone - 处于暂停状态的应用程序的 NSNotificationcenter

objective-c - 无法将类型 'NSNotification.Name' 的值转换为预期的参数类型 'NSKeyValueObservingOptions'

ios - Objective-C 中的内存游戏

swift - 单击 StatusBar 项目时弹出一个 View

python - 如何在屏幕上绘制不获取焦点并始终位于顶部的通知(Windows)

ios - 为什么当键盘隐藏时整个 View 会跳起来?

macos - 具有自定义 View 的 NSCollectionViewItem