NSTextView textDidChange / didChangeText未调用绑定

时间:2012-12-14 09:31:44

标签: cocoa cocoa-bindings nstextview

我有一个自定义NSTextView实现,可自动调整字体大小,以便文本填满整个视图。

我覆盖didChangeText来调用我的字体大小调整方法。当用户编辑文本时工作得很好,但是当通过绑定设置文本视图内容时,不会调用didChangeText(和委托方法textDidChange:)。

字体调整代码需要在文本设置/更改时运行,而不仅仅是在用户更改文本时。

如何通过绑定检测NSTextView中文本的所有更改?

注意:如果有更好的方法让文本填充整个文本视图而不是增加字体大小,请告诉我。

2 个答案:

答案 0 :(得分:0)

最好将字体属性设置为绑定到文本视图的“attributedString”的NSAttributedString。在textDidChange:委托方法中,您只需使用正确的字体属性重新创建NSAttributedString

答案 1 :(得分:0)

当绑定更新文本时(相对于文本视图更新模型),未调用NSTextView方法didChangeText。

didChangeText是绑定更新的源。如果您覆盖它并且不调用super,则绑定会中断。 didChangeText调用委托方法textDidChange。

不幸的是,在NSTextView更新过程的后期(在布局和存储委托调用之后),didChangeText也被调用。

我发现NSTextStorageDelegate方法“ didProcessEditing”是捕获对绑定字符串所做的更改的最佳方法。尽管您必须小心,此时您可以对textview进行哪些更改,但某些调用已崩溃。

我在这里更全面地回答了自己的类似问题: NSTextView textDidChange not called through binding