如何检测NSTextView
中删除某行(即“\ n”字符)的时间?我可以使用textView:doCommandBySelector:
轻松收听新行并收听"insertNewLine:"
。 (参见here)我也可以使用相同的方法检测字符删除,而是监听"deleteBackward:"
。但是,我不确定如何找出正在删除的字符,因此仅在删除“\ n”字符时才执行操作。有人能指出我这样做的正确方法吗?
答案 0 :(得分:0)
问题的解决方案并不像收听“deleteLine:”方法那么简单,因为没有一个,正如您所发现的那样。最有可能的方法是执行以下操作:
NSTextViewDelegate
- textView:shouldChangeTextInRanges:replacementStrings:
lineRangeForRange:
或– getLineStart:end:contentsEnd:forRange:
NSString *text = myTextView.textStorage.string;
来访问NSTextView的NSString)- textView:shouldChangeTextInRanges:replacementStrings:
中返回YES以允许进行更改。我希望这会有所帮助。
答案 1 :(得分:0)
我找到了一个可以完成工作的解决方法,但只有当你希望NSTextView
始终完全符合文本的大小时,它才有效。
它的工作方式是,每当NSTextView
中的文字发生变化时,您都会使用NSTextView
调整.sizeToFit()
的大小以准确填充文本。它的作用是降低视图的高度以移除文本底部的任何空白区域,或者增加视图的高度以适应视图之外的任何新文本。我意识到,如果我在调整大小之前保存NSTextView
的高度,我可以看到事后高度是否有所下降。如果高度确实下降,那么我知道一条线已被删除。这是代码:
func textDidChange(notification: NSNotification) {
// Save original height of view:
let presize = textView.frame.size.height
textView.sizeToFit() // Resize view so that it fits the text exactly
if presize > textView.frame.size.height { // see if textView's new height is less than what it used to be
// line has been deleted!
}
}