NSCollectionView单选不起作用,但是多选很好 [英] NSCollectionView single selection is not working, but multiple selection is fine

查看:55
本文介绍了NSCollectionView单选不起作用,但是多选很好的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如标题所述,单选时,我的 NSCollectionView 不起作用.

As title described, my NSCollectionView is not working when single selection.

正确显示MyNSCollectionView,

MyNSCollectionView is rendered correcttly,

下面的代码显示了如何初始化NSCollectionView:

below code shows how I initialize my NSCollectionView:

    self.leftBar.dataSource = self
    self.leftBar.delegate = self

    self.leftBar.isSelectable = true
    self.leftBar.allowsEmptySelection = true

    let layout = NSCollectionViewFlowLayout()
    layout.scrollDirection = .horizontal

    layout.itemSize = NSSize(width: 200 , height: 50)

    leftBar.collectionViewLayout = layout


    self.contentView.addSubview(leftBar)

    leftBar <- [
        Top(),
        Left(),
        Bottom(),
        Width(200)
    ]

自定义NSCollectionViewItem

Custom NSCollectionViewItem

class LeftBarCell: NSCollectionViewItem {

var leftBarView : LeftBarView?

override func loadView() {
    leftBarView = LeftBarView(frame: NSZeroRect)
    view = leftBarView!
}

func setup(title : String){

    leftBarView?.titleTextView.string = title
}

}

在LeftBarView

In LeftBarView

class LeftBarView: NSView {

lazy var titleTextView : NSTextView = {

    let titleTextView = NSTextView()

    titleTextView.isEditable = false
    titleTextView.isSelectable = false
    titleTextView.font = NSFont(name: "Helvetica", size: 20)
    return titleTextView
}()

override init(frame frameRect: NSRect) {
    super.init(frame: frameRect)

    self.setupViews()
}

required init?(coder: NSCoder) {
    super.init(coder: coder)
}

func setupViews(){
    self.addSubview(titleTextView)

    self.wantsLayer = true
    self.layer?.backgroundColor = NSColor.lightGray.cgColor

    titleTextView <- Edges()
}

}

我尝试玩

    self.leftBar.isSelectable = true
    leftBar.allowsMultipleSelection = true

,并且多项选择有效.触发了 NSCollectionViewDelegate 中的 didSelectItemsAt

and multiple selection is working. The didSelectItemsAt from NSCollectionViewDelegate is triggered

但是当我尝试使用

    self.leftBar.isSelectable = true

    self.leftBar.isSelectable = true
    self.leftBar.allowsEmptySelection = true

当我单击collectionviewitem时,它不起作用,未触发 NSCollectionViewDelegate 中的 didSelectItemsAt .

It is not working when I click on the collectionviewitem, The didSelectItemsAt from NSCollectionViewDelegate is not triggered.

任何想法都将不胜感激,谢谢!

Any thoughts would be appreciated, thanks!

推荐答案

已解决.这是因为textview覆盖了单元格,您可能需要禁用textview才能使其变为被动状态.

Solved. This is because the textview covers the cell, u might need to disable the textview to become passive.

extension NSTextView {

 open override func hitTest(_ point: NSPoint) -> NSView? {
    return nil
   }
}

这篇关于NSCollectionView单选不起作用,但是多选很好的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆