【问题标题】:How to display elements inside NSCollectionView with various shapes如何在 NSCollectionView 中显示各种形状的元素
【发布时间】:2018-01-26 19:42:48
【问题描述】:
我是一个菜鸟可可家伙。我需要设计和实现一个视图,该视图将使用 Xamarin 在 Mac OS 上显示标签集合。这些标签将具有与之关联的文本和颜色。当在视图中显示时,标签应该展开直到它覆盖整个文本,并且它将以背景和前景色显示。
我已附上此用户控件在 Windows 上的图片,您可以看到 StackPanel 内的标签正在扩展,直到它们覆盖整个文本。希望这可以更好地了解我的问题。
【问题讨论】:
标签:
macos
cocoa
xamarin
nscollectionview
【解决方案1】:
64,000 美元的问题是“这些标签是控件吗?”换句话说,您是希望用户点击这些来做某事,还是只是为了显示?
如果您的答案是“仅用于显示”,则解决方案非常简单:使用 NSTextField 并以编程方式向其添加属性文本 (NSAttributedString)。属性文本将显示属性附加到字段中的文本运行; “背景颜色”等属性。
如果您希望这些按钮成为您可以点击的按钮,那么事情就会变得复杂得多。
由于您显然希望按钮布局“流动”,您可能会考虑使用附件将按钮(嗯,按钮单元格)嵌入NSTextField。这通常是如何插入非文本内容(例如,图像)的方式,但稍加摆弄,它实际上可以是控制单元格可以绘制的任何内容。见How to insert a NSButton into a NSTextView? (inline)。
警告:这不是一个“新手”主题,将涉及控制单元和自定义事件处理。
如果我这样做,我可能会为每个标签创建NSButton 对象(选择适当的样式/看起来像NSRecessedBezelStyle),创建NSView 的自定义子类包含它们,然后重写 layout 方法以按照我想要的方式定位所有按钮。
为了彻底起见,我还重写了固有大小方法,以便整个事物可以根据其包含的按钮的数量和大小参与自动布局。