我有一个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
}
}
答案 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的图片:
如果您按照这些步骤操作,您的商店将在创建时连接。在我的情况下,我有2个出口:
class Tile: NSCollectionViewItem {
@IBOutlet weak var bigScrollView: ItemScrollView!
@IBOutlet weak var smallScrollView: ItemScrollView!
override func awakeFromNib() {
super.awakeFromNib()
}
override func viewDidAppear() {
//
}
}
如图所示,他们都得到了联系: