2015-12-16 29 views
1

用Objective-C编写的我的OS X应用程序需要显示变化的NSString*变量theString,它可能会变得很大。使用NSScrollView替换NSTextField以获取滚动条

我使用Xcode的IB建立在其内部声明AppDelegate.h这样的NSTextField*对象panel显示theString一个笔尖文件:

@property (weak) IBOutlet NSTextField *panel; 

现在我可以设置panel里面的内容AppDelegate.m这样:

self.panel.stringValue = theString; 

这一切工作正常。但我现在想给我的文本字段滚动条。因此,在地方“文本字段”的我选择从对象库的“文本视图”,并获得了蓝线,产生了我的panel一个新的声明现在看起来是这样的:

@property (weak) IBOutlet NSScrollView *panel; 

这个现在还没有较长的作品:

self.panel.stringValue = theString; 

提高错误:(!) Property 'stringValue' not found on object of type 'NSScrollView*'

如何需要修正内容这一说法?

(可能我只是说我发现了广泛的关于拜占庭和不透明主题的苹果文档。为什么我很天真地希望简单地回答这个简单的问题,因为这似乎意味着什么?我必须错过某些明显的东西 - 它是什么?)

+0

改用'string'-property(将出口类型改为'NSTextView')。 – Astoria

+0

@astoria - 我很抱歉,我完全忽略了你的评论。你死定了,这是我发现后的答案。 (并且你需要改变(弱)到(强)) –

回答

0

你得到的是一个NSTextView包装在NSScrollView中。 scrollView是使你想要的滚动条的东西。它基本上拥有一个潜在的更大的视图,并且只显示了它的一小部分,你可以使用滚动条移动。您需要从代码中获取(另一个)引用到scrollView内的NSTextView。您可以在IB的层次结构中找到NSTextView并附加到该层次结构中。

这是在你想要的方向,但我认为不是你所需要的。 textView是一个比简单的textField更高级的控件,可能比你需要的要多。你可以改为使用一个自定义视图,通过一个包含默认NSView的NSScrollView进行包装。然后,而不是NSTextView将您的NSTextField放置在NSView上。与此相关的问题是,那么你需要添加一些代码来根据textField的内容自动调整NSTextField和NSView的大小。一旦你得到了这个排序的scrollView将自动安排你需要的滚动条。

+0

Object Library中的NSScrollView已经有一个NSView。 – Willeke

+0

当然,你是对的。我是在重建已经在项目中的控制的心态中,通过删除NSTextView并放入NSView。我同意删除整个事情是更清洁和更安全的,并用含有NSView的NSScrollView重新开始。据此编辑答案。 – pco494

+0

“你得到的是一个包含在NSScrollView中的NSTextView” - 是的,这正是IB对象库告诉我的。但我如何才能让底层的NSTextView获取/设置其“字符串”属性? –