NSCollectionViewItem在itemForRepresentedObjectAtIndexPath

时间:2016-06-01 16:55:40

标签: swift cocoa nscollectionview nscollectionviewitem

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

这是viewcontroller扩展名:

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
    }
}

1 个答案:

答案 0 :(得分:4)

在可可世界,这肯定是一些奇怪的东西。但这里有一些应该有用的流程。在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的图片:

enter image description here

如果您按照这些步骤操作,您的商店将在创建时连接。在我的情况下,我有2个出口:

class Tile: NSCollectionViewItem {

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

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

override func viewDidAppear() {
    //
}

}

如图所示,他们都得到了联系:

enter image description here