NSCollectionViewItem 在 itemForRepresentedObjectAtIndexPath 中没有出口
NSCollectionViewItem has nil outlets in itemForRepresentedObjectAtIndexPath
我有一个 NSCollectionView,它显示了一堆名为 "ImageCollectionViewItem" 的项目。我有一个 ImageCollectionViewItem.xib 文件,其中只有一个 NSView 覆盖了该项目。我希望能够动态更改该视图中的内容,但是当我尝试引用它时,它是零。我已经检查过类似的问题: ,这不是我的问题,我链接了它并且我有实心圆
这是 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
}
}
这在 Cocoa 世界中肯定是一些奇怪的东西。但这里有一些流程应该有所帮助。在 Interface Builder 中打开 ImageCollectionViewItem.xib 并从对象库中拖动 "Collection View Item",然后 select 并将自定义 class 名称设置为 ImageCollectionViewItem,然后 makeItemWithIdentifier 应该创建非零项目。
在我的示例中,我有 Tile class:
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() {
//
}
}
如图所示,它们都已连接:
我有一个 NSCollectionView,它显示了一堆名为 "ImageCollectionViewItem" 的项目。我有一个 ImageCollectionViewItem.xib 文件,其中只有一个 NSView 覆盖了该项目。我希望能够动态更改该视图中的内容,但是当我尝试引用它时,它是零。我已经检查过类似的问题:
这是 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
}
}
这在 Cocoa 世界中肯定是一些奇怪的东西。但这里有一些流程应该有所帮助。在 Interface Builder 中打开 ImageCollectionViewItem.xib 并从对象库中拖动 "Collection View Item",然后 select 并将自定义 class 名称设置为 ImageCollectionViewItem,然后 makeItemWithIdentifier 应该创建非零项目。
在我的示例中,我有 Tile class:
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() {
//
}
}
如图所示,它们都已连接: