我的视图覆盖在UITableView的顶部。但是我需要在用户拖动顶视图时触发UITableView事件的滚动事件。
我在视图上添加了UIPanGestureRecognizer,并在使用setContentOffset
时成功触发了scrollViewDidScroll事件:
@IBAction func handleScroll(sender: UIPanGestureRecognizer)
{
if sender.state == UIGestureRecognizerState.Changed
{
let transtion = sender.translationInView(self.contentViewContainer)
tableViewController.tableView.setContentOffset(CGPointMake(0, 0 - transtion.y), animated: false)
}
}
// UITableView delegate
override func scrollViewDidScroll(scrollView: UIScrollView)
{
// this will be called while using setContentOffset.
}
但是如何针对此案例触发scrollViewWillEndDragging
事件?
@IBAction func headerScroll(sender: UIPanGestureRecognizer)
{
if sender.state == UIGestureRecognizerState.Ended
{
// Do what?
}
}
override func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>)
{
// To trigger this?
}
答案 0 :(得分:1)
为什么不跟踪tableview而不是滚动。
tableView:didEndDisplayingCell:forRowAtIndexPath:
在显示每个单元格后将调用此方法。
答案 1 :(得分:0)
您无需触发&#34;触发&#34;委托方法。您可以直接调用scrollViewWillEndDragging()。
但是,请记住,主要线程上会发生滚动之类的事情,所以在用户操作实际完成之前,您可能无法看到更新。
答案 2 :(得分:0)
不是试图触发scrollViewWillEndDragging,而是打不开:
[tableView setContentOffset:tableView.contentOffset animated:NO];
它应该阻止表格滚动。
答案 3 :(得分:0)
UITableView有一个名为'panGestureRecognizer'的属性(实际上它是一个UIScrollView属性)。您可以对其进行引用并将其添加到您的重叠视图中。通过这种方式,您将触发任何与UIScrollView相关的事件。
UIPanGestureRecognizer *pan = myTableView.panGestureRecognizer;
[myOverlaidView addGestureRecognizer:pan];
答案 4 :(得分:0)
当您设置表视图委托时,它会在内部将您的类设置为滚动视图委托,您可以直接实现
检查UITableViewDelegate的此声明 @protocol UITableViewDelegate