UICollectionView无意中按下按钮滚动

时间:2014-09-19 21:19:10

标签: ios objective-c cocoa-touch

我在UIButton添加了UICollectionViewCell,其中一个调用方法的触摸事件会调出UIPopoverController,与集合视图完全无关。

问题是,当我按下此按钮时,我的UICollectionView滚动得如此轻微。我似乎无法弄清楚为什么。在我的按钮被实际按下之前调用滚动动作 - 所以我试图在被调用的方法中阻止这个形式是徒劳的。

有没有人遇到过这个问题,或者有任何关于如何防止它发生的指示?

我尝试在触摸时禁用集合视图上的滚动,但看起来触摸也会触发滚动 - 在滚动禁用之前。

2 个答案:

答案 0 :(得分:0)

如果我的问题正确,我认为这行代码可以帮助你。

$code

问题是当collectionView上有触摸时,系统不知道你试图点击按钮或滚动视图,因此Apple给予滚动更高的优先级。希望这个答案是对的。

很好回答一年前提出的问题:)

答案 1 :(得分:0)

要解决此问题,您应该override func touchesShouldCancel

首先,您创建新的类,继承UICollectionViewUITableViewUIScrollView

有问题,您想在UICollectionView中取消。 所以你让类继承UICollectionCiew

第二,在func init中设置属性

self.delaysContentTouches = false
self.canCancelContentTouches = true

最后,您覆盖func touchesShouldCancel可以取消触摸视图的种类 有问题的是,您想通过UIButton触摸来取消。

您在代码下方继承类

import UIKit

class TouchCancelCollectionView: UICollectionView {

    override init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) {
        super.init(frame: frame, collectionViewLayout: layout)
        self.delaysContentTouches = false
        self.canCancelContentTouches = true
    }

    required init(coder aDecoder: NSCoder) {
        fatalError()
    }

    override func touchesShouldCancel(in view: UIView) -> Bool {

        if view.isKind(of: UIButton.self) {
            return true
        }

        return super.touchesShouldCancel(in: view)
    }
}

并使用它!