如何触发scrollViewWillEndDragging事件?

时间:2014-12-20 05:11:34

标签: ios uitableview swift uiscrollview

我的视图覆盖在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?
}

5 个答案:

答案 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