从不调用collectionView(_:didDeselectItemsAt :)

时间:2017-01-10 13:57:09

标签: cocoa delegates mouseevent appkit nscollectionview

出于某种原因,当我单击某个项目时,我的NSCollectionView(使用我编写的自定义布局)调用其委托的collectionView(_:didSelectItemsAt:)函数,但是当我点击该collectionView(_:didDeselectItemsAt:)时,class MyCollectionViewContainer: NSViewController { fileprivate lazy var collectionView: NSCollectionView = { let collectionView = NSCollectionView() collectionView.delegate = self collectionView.dataSource = self collectionView.collectionViewLayout = self.customLayout collectionView.isSelectable = true collectionView.allowsEmptySelection = true collectionView.allowsMultipleSelection = false }() } extension MyCollectionViewContainer: NSCollectionViewDelegate { func collectionView(_ collectionView: NSCollectionView, didSelectItemsAt indexPaths: Set<IndexPath>) { print("Selected", indexPaths) // Mutate data to reflect that selection } func collectionView(_ collectionView: NSCollectionView, didDeselectItemsAt indexPaths: Set<IndexPath>) { print("Deselected", indexPaths) } } 点击它。

这是我的基本设置:

const wchar_t* password = L"xyz";
if (wcscmp(password, L"xyz") == 0) {
    // Strings are identical
} 

“取消选择”永远不会打印......:/

2 个答案:

答案 0 :(得分:0)

事实证明我的布局没有添加NSCollectionElementKindInterItemGapIndicator类型的任何补充视图;显然,这是集合视图用于检测单击项目时的视图。我的快速解决方案是在我的布局中添加一个巨大的布局,跨越整个集合视图,并使其Z索引低于所有其他项目和补充视图的索引。

答案 1 :(得分:0)

我们需要设置NSCollectionView项目:

 collectionview.isSelectable = true