我在UIButton
添加了UICollectionViewCell
,其中一个调用方法的触摸事件会调出UIPopoverController
,与集合视图完全无关。
问题是,当我按下此按钮时,我的UICollectionView
滚动得如此轻微。我似乎无法弄清楚为什么。在我的按钮被实际按下之前调用滚动动作 - 所以我试图在被调用的方法中阻止这个形式是徒劳的。
有没有人遇到过这个问题,或者有任何关于如何防止它发生的指示?
我尝试在触摸时禁用集合视图上的滚动,但看起来触摸也会触发滚动 - 在滚动禁用之前。
答案 0 :(得分:0)
如果我的问题正确,我认为这行代码可以帮助你。
$code
问题是当collectionView上有触摸时,系统不知道你试图点击按钮或滚动视图,因此Apple给予滚动更高的优先级。希望这个答案是对的。
很好回答一年前提出的问题:)
答案 1 :(得分:0)
要解决此问题,您应该override func touchesShouldCancel
首先,您创建新的类,继承UICollectionView
,UITableView
,UIScrollView
。
有问题,您想在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)
}
}
并使用它!