使平移手势识别器仅在向下滑动并在 tableview 顶部时响应
Posted
技术标签:
【中文标题】使平移手势识别器仅在向下滑动并在 tableview 顶部时响应【英文标题】:make pan gesture recognizer only respond when swiping down AND at the top of a tableview 【发布时间】:2017-12-20 14:52:05 【问题描述】:当用户在 tableView 顶部向下滑动时,我试图关闭当前的 viewcontroller。由于tableview占据了整个屏幕,所以我的手势和tableView
的手势冲突了。
我想过让我的UIPanGestureRecognizer
仅在用户没有滚动 tableview (tableView.contentOffset.y == 0.0
) 并且滑动方向向下时才响应。但是,我没有成功实现这一点。
这是我的代码:
var tableGesture: UIPanGestureRecognizer?
var oPosition: CGPoint?
var currentPosition: CGPoint?
@IBOutlet weak var table: UITableView!
override func viewDidLoad()
super.viewDidLoad()
table.delegate = self
table.dataSource = self
tableGesture = UIPanGestureRecognizer(target: self, action: #selector(tableGesture(_:)))
table.addGestureRecognizer(tableGesture!)
override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool
let translation = tableGesture?.translation(in: table)
return translation!.y > 0 && table.contentOffset.y == 0.0
我已经查看了类似的问题,但没有一个答案对我有用。
【问题讨论】:
为什么要投反对票?如果我错过了什么,希望得到解释。 【参考方案1】:最简单的方法是在您的 tableView 顶部添加另一个清晰的视图,并向该视图添加一个平移手势识别器。它可能很短(我尝试了 20 分,效果很好)。仅当 contentOffset.y
【讨论】:
谢谢,这确实是一个简单的解决方案。【参考方案2】:这对于处理单个动作 Top
或 Bottom
滑动似乎非常关键,其中启用了两个手势并检测相同的事件。
我可以建议一个简单的逻辑解决方案 检测表格视图的滚动位置以及表格行索引是否为零或表格滚动的内容偏移量为零:识别向下滑动事件并关闭/关闭您的视图控制器。
这是类似的解决方案,您可以使用: - Scrolling Delegate in TableView
【讨论】:
所以你建议使用tableView
自己的手势处理程序?【参考方案3】:
如果我明白你想要什么,这就是你所需要的。
考虑到你的tableview是一个scrollview,当用户在你的table上滚动时,这个函数就会运行,你可以通过调用table.contentOffset.y来获取滚动的坐标。
var lastContentOffset: CGFloat = 0
func scrollViewDidScroll(_ scrollView: UIScrollView)
print("the user scrolled down",table.contentOffset.y)
if (self.lastContentOffset > tableView.contentOffset.y)
//scrolling up
else if (self.lastContentOffset < tableView.contentOffset.y)
// scrolling down
// dismiss your view here.
if table.contentOffset.y < 5
// the following code will be called when the user scrolls back up
// show the view again if thats what you need
self.lastContentOffset = scrollView.contentOffset.y
【讨论】:
感谢您的回答,我尝试过这种方式,但不幸的是结果有些错误。以上是关于使平移手势识别器仅在向下滑动并在 tableview 顶部时响应的主要内容,如果未能解决你的问题,请参考以下文章