为啥我的 UICollectionView 单元格在我的 swift ios 应用程序中不可点击?

Posted

技术标签:

【中文标题】为啥我的 UICollectionView 单元格在我的 swift ios 应用程序中不可点击?【英文标题】:Why is my UICollectionView cell not clickable in my swift ios app?为什么我的 UICollectionView 单元格在我的 swift ios 应用程序中不可点击? 【发布时间】:2016-04-07 21:20:41 【问题描述】:

我在我的 swift 课程中使用 UICollectionView,它位于我的 UIViewController 上。我在我的代码中将 collectionView 连接到了插座,我设置了 delegatedatasource,我在我的应用程序中看到了结果。除了当我单击每个单元格时,一切都正常工作 - 没有任何反应。

我的代码如下:

class UsersList: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate 


@IBOutlet weak var tview: UICollectionView!

override func viewWillAppear(animated: Bool) 
    super.viewWillAppear(animated)

    tview.backgroundColor = UIColor.whiteColor() //this works
    tview.delegate = self
    tview.dataSource = self


func collectionView(tview: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) 
    print("You selected cell #\(indexPath.item)!")
    //this does not appear in the console :(

我还能做些什么来在控制台中查看打印消息?

【问题讨论】:

【参考方案1】:

在swift中,参数名和函数名一起标识一个函数。 UICollectionViewDelegate 有功能

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath)

但不是

func collectionView(tview: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath)

【讨论】:

我试过了,但它没有帮助,我仍然无法在单击单元格时显示任何消息...我认为这可能是由于我没有放置override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) 之前的字,但是当我这样做时,我收到一条消息,Method does not override any method from its superclass... 还有什么我可能会错过的吗? UICollectionViewDelegate 是一个协议,不需要添加override关键字。你可以查看uicollectionView的allowsSelection,应该是真的。【参考方案2】:

尝试从视图中删除所有 UIGesture,然后测试 UICollectionView 单元是否能够正常交互。

就我而言,我不得不删除这些行:

let tap = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
    self.view.addGestureRecognizer(tap)

由于某种原因,这妨碍了我点击我的单元格。

【讨论】:

【参考方案3】:

对我来说,我必须设置UICollectionView 的委托。例如在viewDidLoad():

collectionView.delegate = self

这是必须的,否则委托方法将不会被调用!

【讨论】:

嗨克洛伊!您能否解释一下为什么这是解决方案?欢迎来到 SO!【参考方案4】:

确保在故事板中启用用户交互

【讨论】:

它是启用的,所以它必须是别的东西:( 另一个可能的问题是您在 viewWillAppear 中设置了 tview.delegate = self, tview.dataSource = self,请在 viewdidload 中执行此操作!希望对您有所帮助【参考方案5】:

我必须在情节提要中将滚动方向从垂直更改为水平,这对我有用。

【讨论】:

【参考方案6】:

我的问题是 collectionView 的父视图的 isUserInteractionEnabled 为 false。我从其他地方获取了父视图的代码,显然这是正确的做法。但不是在这里……叹息……

【讨论】:

以上是关于为啥我的 UICollectionView 单元格在我的 swift ios 应用程序中不可点击?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我们需要 visibleCells 函数(UICollectionView)

为啥带有 UICollectionViewFlowLayout 的 UICollectionView 不显示单元格,而是询问大小?

表格视图单元格中的 uicollectionview 出现错误:索引超出范围,为啥?

为啥 UICollectionView 在滚动其单元格的滚动视图后不再调用 didSelectItemAtIndexPath ?

为啥在索引路径中的 UICollectionView 的 cellForItem 在一开始就被所有单元格调用

为啥在 cellForItemAt 中将 isSelected 设置为 true 的单元格的 UICollectionView 未将 isSelected 设置为 false? [复制]