UIKit集合视图,奇怪的行为(访问/滚动单元格)

时间:2016-11-30 21:44:12

标签: ios swift uicollectionview uikit uitouch

所以我最近在我的应用程序中实现了一个集合视图,我得到了一个我似乎无法解决的错误,搜索它并且没有找到关于它的线索。

如果我的光标/手指放在单元格上,我无法滚动浏览我的集合视图,我需要选择一个"空的"要滚动的区域。

enter image description here

我遇到的第二个奇怪的行为是我无法直接触摸细胞。我需要某种轻扫手势才能在选择单元格时触发代码。

enter image description here

如果我在故事板上转到我的收藏夹视图,并在滚动视图部分选择延迟内容触摸可取消内容触摸,则集合视图滚动得很好,但如果我将手指/光标放在已启用这些选项的单元格上,我无法访问任何单元格。

enter image description here

这让我感到很困惑。

感谢您阅读/考虑此主题。

2 个答案:

答案 0 :(得分:3)

让我们看看你的两个属性是做什么的。

delaysContentTouches:如果此属性的值为true,则滚动视图会延迟处理触摸手势,直到它可以确定滚动是否为意图。如果值为false,则滚动视图会立即调用touchesShouldBegin(_:with:in :)。默认值为true。

canCancelContentTouches:如果此属性的值为true且内容中的视图已开始跟踪触摸它的手指,并且如果用户拖动手指足以启动滚动,则视图会收到touchesCancelled( _:with :)消息,滚动视图将触摸处理为滚动。如果此属性的值为false,则在内容视图开始跟踪时,无论手指移动,滚动视图都不会滚动。

首先,将delayedContentTouches设置为false。因此,scrollview立即调用内容视图的触摸处理方法,允许它处理触摸。显然,即使你拖动,滚动视图也不会立即开始滚动。

其次,您还将canCancelContentTouches设置为false。但是如果不允许滚动视图“接管”内容已经处理的触摸(通过取消它们),则它永远不能再开始滚动。因此,如果您的触摸点击内容视图,则滚动视图无法开始滚动:不允许立即滚动,因为不允许延迟内容触摸,并且它无法开始滚动后来因为无法取消内容触动。

我不知道你的细胞内发生了什么,不知道你放在那里的代码是什么。但是,你应该允许你的tableview延迟触摸(这意味着你的单元格不会处理因为它们是滚动手势而立即被取消的滑动),并取消内容触摸(这意味着当你触摸时向下并且不释放,您仍然可以在单元格突出显示后开始滚动手势)。

答案 1 :(得分:0)

我在触摸一个单元时遇到同样的问题,问题是我在没有添加" .cancelsTouchesInView = false"的情况下使用了多个UIGesture。为每一个

因此,如果您正在使用UIGesture,只需添加Your_Gesture.cancelsTouchesInView = false

即可

您应该可以访问您的单元格