Не могу заставить NSCollectionView NSCollectionViewItem работать - PullRequest
0 голосов
/ 18 сентября 2018
    override func viewDidLoad() {
    super.viewDidLoad()
    // Do view setup here.

    let item = NSNib(nibNamed: NSNib.Name("CollectionViewItem"), bundle: nil)
    self.collectionView.register(item, forItemWithIdentifier: .collectionViewItem)


extension ViewController: NSCollectionViewDataSource {

func numberOfSections(in collectionView: NSCollectionView) -> Int {
    return 1
}

func collectionView(_ collectionView: NSCollectionView, numberOfItemsInSection section: Int) -> Int {
    return Templates.count
}

func collectionView(_ collectionView: NSCollectionView,
                    itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem {

    let item = collectionView.makeItem(
        withIdentifier: .collectionViewItem, for: indexPath)

    guard let collectionViewItem = item as? CollectionViewItem else {return item}

    collectionViewItem.imageView = image
    return item
}
}

extension NSUserInterfaceItemIdentifier {
static let collectionViewItem = NSUserInterfaceItemIdentifier("CollectionViewItem")
}

Я настроил все как в приведенном ниже коде, но по какой-то причине я не могу передать

guard let collectionViewItem = item as? CollectionViewItem else {return item}

Охранник всегда возвращает элемент, а не collectionViewItem.Может быть, кто-то сталкивался с такой проблемой?Что я делаю неправильно?Практически все следовали инструкциям https://www.raywenderlich.com/1246-collection-views-in-os-x-tutorial.

Использование последней версии Xcode 10.0 + последний swift

1 Ответ

0 голосов
/ 19 сентября 2018

Обнаружена проблема.

Проблема: Что я сделал: я создал новый файл с подклассом NSCollectionViewItem и решил также создать .xib.

Оказывается, Xcode 10.0 делаетне делай это правильно.Он создал .xib с заполнителями, владельцем файла и прочим.Xcode не добавил объект View Collection Collection из IB.Что странно, поскольку предыдущие версии автоматически добавляли объект «Элемент представления коллекции».

Как только я добавил объект «Элемент представления коллекции» и установил класс, проблема решилась сама собой.

...