1

我有一个 NSCollectionView,它显示了一堆名为“ImageCollectionViewItem”的项目。我有一个 ImageCollectionViewItem.xib 文件,它只有一个 NSView 覆盖该项目。我希望能够动态更改该视图中的内容,但是当我尝试引用它时,它是 nil。我已经检查了以下问题:UIViewController 中的 outlets nil in viewdidload,这不是我的问题,我链接了它并且我有实心圆圈

这是视图控制器扩展:

extension ViewController : NSCollectionViewDataSource {

    func collectionView(collectionView: NSCollectionView, numberOfItemsInSection section: Int) -> Int {
        return titles.count
    }
    func collectionView(collectionView: NSCollectionView, itemForRepresentedObjectAtIndexPath indexPath: NSIndexPath) -> NSCollectionViewItem {
        let item = collectionView.makeItemWithIdentifier("ImageCollectionViewItem", forIndexPath: indexPath) as! ImageCollectionViewItem

        //This is what is nil:
        let thisView = item.iconView

        return item
    }

}

然后这里是 ImageViewCollectionItem 代码

class ImageCollectionViewItem: NSCollectionViewItem {

    @IBOutlet weak var iconView: NSView!

    var numItem: Int?

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do view setup here.

        view.wantsLayer = true
        view.layer?.backgroundColor = NSColor.whiteColor().CGColor
    }
}
4

1 回答 1

6

这在可可世界中肯定是一些奇怪的东西。但这里有一些应该有所帮助的流程。在 Interface Builder 中打开您的 ImageCollectionViewItem.xib 并从 Object Library 中拖动“Collection View Item”,然后选择它并将您的自定义类名称设置为 ImageCollectionViewItem,然后 makeItemWithIdentifier 应该创建非零项目。

在我的示例中,我有 Tile 类:

 class Tile: NSCollectionViewItem {

这是我创建瓷砖的方式:

func collectionView(collectionView: NSCollectionView, numberOfItemsInSection section: Int) -> Int {

    return items.count
}


func collectionView(collectionView: NSCollectionView,
                    itemForRepresentedObjectAtIndexPath indexPath: NSIndexPath) -> NSCollectionViewItem {

    let item = collectionView.makeItemWithIdentifier("Tile", forIndexPath: indexPath) as! Tile
    return item


}

这是IB的图片:

在此处输入图像描述

如果您按照这些步骤操作,您的网点将在创建时连接。就我而言,我有 2 个网点:

class Tile: NSCollectionViewItem {

@IBOutlet weak var bigScrollView: ItemScrollView!
@IBOutlet weak var smallScrollView: ItemScrollView!

override func awakeFromNib() {
    super.awakeFromNib()
}

override func viewDidAppear() {
    //
}

}

正如您在图片中看到的那样,它们都已连接:

在此处输入图像描述

于 2016-06-17T23:31:41.090 回答