0

我的用户界面有问题。我想让一些控件(即只读NSTextField(又名多行标签)和a NSTokenField)显示它们包含的所有文本,这些文本可能会有很大差异(从几个字到很多行)。

我想将它们嵌入到 中NSScrollView,但也许这还不够,因为我无法实现我的目标......

有人可以帮我解决这个问题吗?

谢谢

编辑:我添加了一张图片。

用户界面

也许滚动条不是正确的解决方案。正如您在图片中看到的,我有一个“简单”attribute1 字段,然后是包含大量文本的第二个字段(我需要在其中显示更多文本),以及一个包含大量文本。

我看到了两种选择(即使我还不知道如何实现它们..):

  • 使田地高度增长(但我只是推迟了问题:如果它们变得如此之大以至于窗口也需要增长怎么办?
  • 将它们嵌入到滚动视图中(并在这种情况下使滚动条可见,以便用户知道还有更多内容要阅读)。我认为第二种选择更好..但简单地将字段嵌入滚动视图并不能解决问题,所以我问我是否也需要以编程方式实现某些东西(和子类化NSView)......

EDIT2:仍然有问题:如果我设置为约束“大小> =我的最小值”,那么文本字段会正确增长..当然没有滚动视图..如果,那么,我尝试将它嵌入NSScrollView到文本中再次剪辑(并且滚动视图不滚动)...

EDIT3:我附上了一个示例项目,我在其中尝试显示问题(没有我的主要项目的所有其他内容) http://www.filedropper.com/testtextfield

4

3 回答 3

1

您的要求是制作具有 NSTextField 和 NSTokenField 的自定义控件。

您可以做的是,创建一个 NSView 并将它们都嵌入其中,然后在 NSScrollView 中显示它们。

于 2013-03-18T10:56:45.980 回答
0

根据您想要做什么,Anoop 的建议可能很好,将它们嵌入NSViewNSScrollView. 但是,如果您希望滚动视图中的每个字段具有与滚动视图相同的宽度但动态更改它们的高度,您将需要NSViewFrameDidChangeNotification在滚动视图上监听并更改preferredMaxLayoutWidth每个NSTextFields 和以NSTokenField匹配滚动视图的宽度。我可能会建议将包含子类化NSView并让它监听通知。

编辑:

我不确定您遇到了什么具体问题,但我将如何分解问题:

1)创建一个子类NSView作为您的容器视图。

2) 将文本视图嵌入到容器视图的实例中,然后将该容器视图嵌入NSScrollView

3) 文本视图应该对其父视图具有前导和尾随空间约束(可能为 0,但无论对您有用)以及彼此的顶部和底部约束以及对父视图的顶部和底部约束,以将它们放入堆叠配置中。

4) 在容器视图子类中,NSViewFrameDidChangeNotification在其包含的滚动视图上注册,当它收到通知时,-setPreferredMaxLayoutWidth:在每个文本字段上注册以匹配 NSScrollView 的宽度。

于 2013-03-18T11:29:04.990 回答
0

我解决了我的问题(嗯..它更像是一种解决方法而不是真正的解决方案):

  • 对于标签,我使用了 NSTextView,只读,不可选择且具有透明背景(因此它看起来像只读的 NSTextField,但带有滚动条)。
  • 对于我使用 SSYTokenField 的令牌字段(我在这里找到:https://github.com/jerrykrinock/ClassesObjC)..对于我当前的要求(只读和在创建窗口时决定的字段大小)它可以工作..我不知道这是否可以在更复杂的情况下工作。顺便说一句:我读到可可自动布局在 NSScrollView 方面仍然存在一些问题(嗯.. 恰恰相反:D)。我必须用旧的支柱和弹簧(自动调整大小的面罩)进行测试,看看我是否还有问题..
于 2013-06-20T10:42:36.937 回答