集合查看项目重叠

时间:2016-08-27 01:13:40

标签: swift cocoa nscollectionview

我正在尝试使用垂直方向的流布局设置NSCollectionView。为了快速测试数据源,我分别从Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim varValue As Variant 'get the cell value varValue = ActiveCell.Value 'do something with it - you can launch your form here MsgBox CStr(varValue) ' NOTICE here that you can cancel the double click event ' meaning no attempt to edit the cell will be made per the users double click Cancel = True End Sub collectionView(_:numberOfItemsInSection:)返回静态数字和视图。

以下是方法:

collectionView(_:itemForRepresentedObjectAtIndexPath:)

基本上,我总是返回2个全黑的NSCollectionViewItems,不透明度为50%。当我运行应用程序时,它将两个视图放在一起。

app screenshot showing a single dark gray square

这是一个分解显示两个视图:

enter image description here

每个项目的大小设置为50x50,每个方向的最小间距为10。

我错过了什么?是什么让这些观点分开?在documentation中,它说:

  

通常,您可以使用此类的属性指定项目的大小及其间距。如果要自定义项的值,请在分配为集合视图委托的对象中实现NSCollectionViewDelegateFlowLayout协议的方法。

我没有实现这个委托,所以不应该使用我在界面构建器中放置的值(50x50和10间距)吗?

2 个答案:

答案 0 :(得分:0)

我仍然不确定问题到底是什么,但这是我采取的措施:

  1. 使用关联的xib创建一个NSCollectionViewItem子类(让我们调用子类Item
  2. 将集合视图项添加到界面构建器
  3. 中的文档大纲
  4. 将Collection View Item的类更改为我的自定义子类(Item
  5. collectionView(_:itemForRepresentedObjectAtIndexPath:)中的代码更改为以下内容:
  6. func collectionView(collectionView: NSCollectionView,
                        itemForRepresentedObjectAtIndexPath indexPath: NSIndexPath) -> NSCollectionViewItem {
      return collectionView.makeItemWithIdentifier("Item", forIndexPath: indexPath)
    }
    

    现在我不仅要按照自己的意愿进行布局,而且还要定制,而不仅仅是灰盒子!以下this教程帮我解决了这个问题。

    如果有人想要解释实际问题是什么,我会保持开放并接受实际回答问题的内容。

答案 1 :(得分:0)

我遇到了同样的问题,并且假设影响你的是同样的事情,也已经找到了修复。

当NSCollectionViewItem子类的多个实例最终配置为定位同一项目视图时,会出现描述的症状。我遇到这种方式非常简单,因为我试图设置一个基于类的项目,但仍然由xib支持。像这样:

  1. 创建一个新的NSCollectionViewItem子类,指定一个nibName和nibBundle。
  2. 创建新的NSView笔尖。
  3. 将集合视图实例拖出,并将其出口连接到视图。
  4. 将File的Owner类设置为您的子类名称。
  5. 将出口连接从文件所有者代理拖到视图。
  6. 在代码中,使用NSCollectionView.register(class:...)来设置项目。
  7. 现在你已经有了一个可以实例化并自动加载其nib的类,这要归功于默认的NSViewController机制。但是,当您这样做时,它还将实例化另一个指向视图的NSCollectionViewItem实例。

    我的理论是第二个,虚假视图项目实例在重新布局时最终会查看视图定位,并且默认为0-0索引路径,从而导致每个关联视图绘制在相同位置

    修复是删除xib中的伪造顶级视图项,或者切换到使用基于寄存器(nib:...)的方法。