collectionView:didSelectItemAtIndexPath 不会在点击时被调用
Posted
技术标签:
【中文标题】collectionView:didSelectItemAtIndexPath 不会在点击时被调用【英文标题】:collectionView:didSelectItemAtIndexPath does not get called on tap 【发布时间】:2015-06-24 08:27:52 【问题描述】:我有一个UICollectionViewController
,这个集合的单元格有一个子视图 - 比如说 A- 与单元格边界具有相同的框架。
问题是当我点击这些单元格时,collectionView:didSelectItemAtIndexPath
不会被调用。我还将 A 的 ExclusiveTouch 设置为 YES,但仍然没有。而且当我把A的框架改小一点时,点击剩余区域会触发collectionView:didSelectItemAtIndexPath
,没问题。
此时我应该怎么做才能让这个 collectionView 委托在 A 的边界与单元格相同的地方被调用。
我会很感激任何 cmets。
【问题讨论】:
它是 UIScrollView @RajeshMaurya 的子类 亲爱的我知道 UIScrollView 是 UIcollectionView 的超类。我想知道您是在使用 collectionviewcell 中的按钮还是其他任何东西。 【参考方案1】:如果我正确理解了您的问题,则您的 UICollectionViewCells 中包含子视图。为了触发 didSelectItemAtIndexPath 触摸子视图,您需要在界面构建器中禁用“启用用户交互”。我的集合视图单元格中有一个 UIButton 作为子视图,这对我有用。
【讨论】:
你是我的英雄!【参考方案2】:将exclusiveTouch
设置为YES 会导致接收器阻止将触摸事件传递到同一窗口中的其他视图。所以就不要了吧
如果您的子视图是 UIImageView
,则将 userInteractionEnabled
设置为 YES
否则,如果您的子视图是 UIButton
或其他将捕获点击手势的 UIControl
子类,您需要将其更改为纯 UIView
子类
【讨论】:
我的子视图是 UIScrollView 的子类,将 userInteractionEnabled 设置为 YES 不会调用 collectionView:didSelectItemAtIndexPath UIScrollView 也会捕捉手势。它不会将触摸事件发送给下一个响应者@cihangirs 我将 A 的 userInteractionEnabled 设置为 YES,将 ExclusiveTouch 设置为 NO,但仍然没有调用 collectionView:didSelectItemAtIndexPath,这里有什么遗漏或错误吗? 都是关于 UIScrollView 的。它不会将触摸事件发送给下一个响应者@cihangirs【参考方案3】:方法应该是override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath)
并确保:
您可以在属性检查器中找到此复选框。
【讨论】:
我正在编写objective-c并且不使用故事板,以编程方式添加子视图 您实现的方法是正确的:collectionView:didSelectItemAtIndexPath 相同的签名。对于用户交互启用,你可以简单地做:yoursubview.userInteractionEnabled = YES; dopcn 说“将 ExclusiveTouch 设置为 YES 会导致接收器阻止将触摸事件传递给同一窗口中的其他视图。所以将其保留为 NO”这可能是一个原因为您的问题。【参考方案4】:检查你的方法是- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
还是- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath
有时会发生。
您是否已禁用单元格的用户交互属性检查一次。
【讨论】:
方法是collectionView: didSelectItemAtIndexPath【参考方案5】:我添加我的愚蠢答案以防万一它帮助别人。 在你的 viewcontroller 中记得设置 collectionview 的委托
collectionView.delegate = self
【讨论】:
以上是关于collectionView:didSelectItemAtIndexPath 不会在点击时被调用的主要内容,如果未能解决你的问题,请参考以下文章