我有一个集合视图,可以加载产品列表,但它没有任何奇特的功能。它只是从API加载数据。问题是,当我尝试点击集合视图中的一个项目时
collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
没有被调用。但是,当我长按一个牢房时,它会被召唤。
我很确定没有在手机上应用手势。
任何人都可以给我一些指导来解决这个问题。
我拥有的代码库如下
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cellTapped = (self.storeSearchListingCollectionViewOutlet.cellForItem(at: indexPath)) as! StoreSearchProdListingCollectionViewCell
UStoreShareClass.storeSharedInstance.longTappedProductID = String(cellTapped.tag)
if((UStoreShareClass.storeSharedInstance.longTappedProductID) != nil)
{
self.performSegue(withIdentifier: "searchToProductDetailSegue", sender: self)
}
else
{
SetDefaultWrappers().showAlert(info:SERVER_DOWN_ERROR_ALERT, viewController: self)
}
}
查看层次结构如下
提前致谢...... !!!
答案 0 :(得分:1)
这是故意的。在故事板上转到集合视图并取消选中属性检查器中的“延迟触摸”。
答案 1 :(得分:0)
可能有两个原因:
1)可能是第一个原因是:
不幸的是,您的代码没有让主线程在UI上运行。因此,您必须将与UI相关的部分放在MAIN线程中。
DispatchQueue.main.async {
// PUT YOUR CODE HERE
if((UStoreShareClass.storeSharedInstance.longTappedProductID) != nil)
{
self.performSegue(withIdentifier: "searchToProductDetailSegue", sender: self)
}
else
{
SetDefaultWrappers().showAlert(info:SERVER_DOWN_ERROR_ALERT, viewController: self)
}
}
2)第二个原因:
你有没有关闭collectionView
弹跳?
在故事板中,选中"弹出滚动"如果未选中,则collectionView
的复选框。
答案 2 :(得分:0)
对于这个老问题的未来读者-将来可能是我;)
我有一个UITapGestureRecognizer
吞咽了我的小水龙头(在UICollectionView的祖父母中),因此只有旧的水龙头才能通过!我确认你有同样的问题。您只需要添加tapRecognizer.cancelsTouchesInView = false
!
let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(tapDidTouch(sender:)))
tapRecognizer.cancelsTouchesInView = false
scrollView.addGestureRecognizer(tapRecognizer)
答案 3 :(得分:-1)
首先,将断点置于if条件中并检查它是否进入didselect块。然后,
尝试添加" performsegue"主线程中的代码如下所示
if((UStoreShareClass.storeSharedInstance.longTappedProductID) != nil)
{
DispatchQueue.main.async
{
self.performSegue(withIdentifier: "searchToProductDetailSegue", sender: self)
}
}
else
{
SetDefaultWrappers().showAlert(info:SERVER_DOWN_ERROR_ALERT, viewController: self)
}