为啥我的 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 连接到了插座,我设置了 delegate
和 datasource
,我在我的应用程序中看到了结果。除了当我单击每个单元格时,一切都正常工作 - 没有任何反应。
我的代码如下:
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? [复制]