2016-04-25 44 views
0

我正在为OSX开发示例应用程序。我想要一个用户可以输入和编辑文本的文本区域。我希望文本区域随着字符数量的增加而增长,并且我想让文本区域可以滚动并在超出特定长度后保持其高度不变。我正在使用NSTextField来达到这个目的。但我无法使其滚动。此外,我尝试在scrollview内使用可滚动的NSTextView来达到此目的。 NSTextField不允许我通过“接口”构建器设置字体和字号。使NSTextField可滚动

+0

NSTextField不应该是可滚动的(就像你发现的那样)。这只适用于一条线。 NSTextView是您试图实现的正确观点。你没有说NSTextView不适合你。你可以更具体一些 - 也许,发布一些代码,以便我们可以看到你在做什么? – headbanger

+0

@headbanger基本上我希望NSTextView随着文本的增加而增长,但只有一些高度。之后,我想滚动。我怎样才能做到这一点?无论如何,我可以在运行时计算NSTextView所需的高度吗? – hcnimkar

回答

0

首先,如您所识别,您需要计算文本的高度。 Apple在此处需要说明: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/TextLayout/Tasks/StringHeight.html

然后,您需要更改NSTextView的框架或约束(如果您使用自动布局),将大小调整至预定义的最大值。

如果我是你,我会继承NSTextView,然后重写keyDown:以便在文本更改时重新计算大小。是的,这可能不是最有效的解决方案 - 但您有足够的余力,这是一个很好的简单解决方案。

至于设置字体,你需要在文本存储上设置字体 - 而不是在视图上。这是如何做到这一点:

[textview.textStorage setFont:[NSFont fontWithName:@"Helvetica" size:12]]; 

如果这不适合你,你可以发布不工作的代码?

+0

是的谢谢:)我会这样做 – hcnimkar

+0

我无法改变NSTextView的字体,虽然 – hcnimkar

+0

而不是NSTextView的子类我会使用委托并实现'textDidChange:'。文本更改时NSTextView正在增长。您必须调整滚动视图。 – Willeke