cuốn sách gpt4 ai đã làm

ios - 如果 CollectionView 项目集成了另一个 CollectionView,则无法选择该项目

In lại Tác giả: Walker 123 更新时间:2023-11-29 05:08:45 29 4
mua khóa gpt4 Nike

我的 NSCollectionView 项目集成了另一个 NSCollectionView。一切都很好,但在第一个 View 中选择项目时就不行了。

当我设置collectionView1.isSelectable = true时,仅当我单击第二个(集成)collectionView以外的其他位置时才会调用didSelectItemsAt委托(delegate)。更清楚地说,如果我单击标签、图像或自定义 View :它就会起作用。一旦我单击第二个 Collection View ,就不会调用委托(delegate)。

这是我迄今为止尝试过的:

  1. SẽcollectionView2.isSelectable = true 设置为第二个 View 。但这不起作用。
  2. 我关注了 this tip .奇怪的是这也不起作用。我也有同样的行为。
  3. 唯一有效的方法是在每个集成 Collection View 上添加手势识别器。但这太丑了...

我还没有在 iOS 上尝试过 UICollectionView 和单元格选择,但我倾向于认为问题是相同的。

biên tập:

nhập mô tả hình ảnh ở đây

因此,如果我单击绿色标签或蓝色部分(这是第一个 Collection View 项)上的任何位置,则将正确调用 didSelectItemsAt 委托(delegate)。如果我点击橙色的 NSView(里面有第二个 CollectionView),它不会被调用..

这是第一个 CollectionView 的简化代码:

class DashboardVC: NSViewController {

@IBOutlet weak var collectionView1: NSCollectionView!

override func viewDidLoad() {
super.viewDidLoad()

self.initViews()
}

fileprivate func initViews() {
let flowLayout = NSCollectionViewFlowLayout()
flowLayout.itemSize = NSSize(width: 400.0, height: 380.0)
flowLayout.sectionInset = NSEdgeInsets(top: 20.0, left: 20.0, bottom: 20.0, right: 20.0)
flowLayout.minimumInteritemSpacing = 20.0
flowLayout.minimumLineSpacing = 20.0
self.collectionView1.collectionViewLayout = flowLayout
self.collectionView1.isSelectable = true
self.collectionView1.dataSource = self
self.collectionView1.delegate = self
}
}

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

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

func collectionView(_ itemForRepresentedObjectAtcollectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem {
let item = self.collectionView1.makeItem(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "CollectionViewItem"), for: indexPath)
guard let collectionViewItem = item as? CollectionViewItem else { return item }
return collectionViewItem
}
}

extension DashboardVC: NSCollectionViewDelegate {

func collectionView(_ collectionView: NSCollectionView, didSelectItemsAt indexPaths: Set) {
print("I can't make this work!")
}
}

对于第二个 Collection View :

class TabularView: NSView {

lazy var collectionView2: NSCollectionView = {
let gridLayout = NSCollectionViewGridLayout()
gridLayout.maximumNumberOfColumns = self.numberOfColums
gridLayout.maximumNumberOfRows = self.numberOfRows

let collectionView = NSCollectionView(frame: .zero)
collectionView.collectionViewLayout = gridLayout
collectionView.translatesAutoresizingMaskIntoConstraints = false
collectionView.isSelectable = true //-> does not work :(
collectionView.dataSource = self
collectionView.delegate = self
return collectionView
}()

override init(frame frameRect: NSRect) {
super.init(frame: frameRect)
self.setup()
}

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

private func setup() {
self.addSubview(self.collectionView)
NSLayoutConstraint.activate([
self.topAnchor.constraint(equalTo: self.collectionView.topAnchor),
self.bottomAnchor.constraint(equalTo: self.collectionView.bottomAnchor),
self.leadingAnchor.constraint(equalTo: self.collectionView.leadingAnchor),
self.trailingAnchor.constraint(equalTo: self.collectionView.trailingAnchor),
])
}
}

extension TabularView: NSCollectionViewDataSource {

func collectionView(_ collectionView: NSCollectionView, numberOfItemsInSection section: Int) -> Int {
return self.numberOfRows * self.numberOfColums
}

func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem {
let item = collectionView.makeItem(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "TabularCollectionViewItem"), for: indexPath)
guard let collectionViewItem = item as? TabularCollectionViewItem else { return item }
return collectionViewItem
}
}

câu trả lời hay nhất

如果我正确理解您的问题,您正在尝试禁用对 collectionView1 中特定项目的选择,而是让用户选择嵌入的 collectionView2 项目在这个单元格中。

hãy nhìn xem NSCollectionViewDelegate của collectionView(_:shouldSelectItemsAt:)

来自文档:

Return Value

The set of NSIndexPath objects corresponding to the items that you want to be selected. If you do not want any items selected, return an empty set.

关于ios - 如果 CollectionView 项目集成了另一个 CollectionView,则无法选择该项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59893695/

29 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress