【问题标题】:collectionView(_:didDeselectItemsAt:) is never calledcollectionView(_:didDeselectItemsAt:) 永远不会被调用
【发布时间】:2017-01-10 13:57:08
【问题描述】:

出于某种原因,我的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)
    }
}

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

【问题讨论】:

标签: cocoa delegates mouseevent appkit nscollectionview


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我们需要设置 NSCollectionView 项目被选中:

     collectionview.isSelectable = true
    

    【讨论】:

    • 这似乎只是我问题中的一行代码
    • 我的代码也有同样的问题,所以在上面的代码的帮助下我的问题已经解决了
    • 那么你应该提出一个新问题,发布你的错误代码,并用你找到的这个修复来回答它。你的回答对我的问题没有帮助。
    • 这是错误的这个问题。如果您在此处发布了正确的 HTML 代码,那么 这个问题 仍然是错误的。
    • 不同问题的症状相同。
    猜你喜欢
    • 2012-10-27
    • 2013-10-12
    • 2012-03-27
    • 2013-08-29
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 2015-10-15
    相关资源
    最近更新 更多