【问题标题】:Touches on UICollectionViewCell are delayedUICollectionViewCell 上的触摸被延迟
【发布时间】:2014-07-25 18:36:08
【问题描述】:

我有一个带有 UILabel 的 UICollectionViewCell。当用户触摸它时,我会更改标签颜色。问题是当您触摸单元格时,文本更改或触摸在您松开手指之前无法识别。

我认为您可以设置一些延迟设置,以便用户可以在不进行选择的情况下滚动 UICollectionView,但我找不到该属性?

【问题讨论】:

  • 您的视图控制器中是否有其他手势识别器?
  • 不,我没有。我可以设置一个不会延迟触摸的属性。
  • 您查看UICollectionView 上的delaysContentTouches 属性了吗?
  • 这就是我所说的,但我只是设置了它,直到我松开手指后它仍然无法工作。猜猜我需要在每个单元格上放置一个手势识别器,而不是在 didSelectItemAtIndexPath: 方法中更改标签颜色?
  • 为什么不将UIButton 添加到单元格中,该单元格一旦被触摸就会立即触发以立即更改标签颜色。 [button addTarget:self action:@selector(changeLabelColor:) forControlEvents:UIControlEventTouchDown];

标签: ios objective-c uicollectionview uicollectionviewcell


【解决方案1】:

标准的 UIKit 行为是在内部触摸时触发活动(即触摸结束,手指必须仍在控件内)。

在诸如集合视图之类的滚动视图中,子视图将在手指向下时获得touchesBegan:,但如果手指随后移动到足以看起来像滚动而不是轻敲,则会获得后续取消。 UIControls 和相关的UIGestureRecognizers 只是处理该信息。因此,它们遵循 touch up inside 规则,如果动作最终看起来像滚动,则不会触发。

我怀疑是否有直接更改集合视图行为的方法,但您可以让单个单元格开始捕捉触摸,或者在触摸时发布其中的控件。鉴于 UILabel 不是 UIControl 的子类,您可能需要对其进行子类化并执行前者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多