Swift - UITableView滚动事件

27
我想知道如何检测UITableView是否向上或向下滚动。当UITableView被滚动时,我想用self.view.endEditing(true)隐藏键盘。
提前感谢您。

似乎是一个XY-问题,因为OP假定必须要实现一些滚动视图代理方法来关闭键盘,但正如Daniil 所示,有更简单的解决方案。该问题更好地表述为“如何在滚动时关闭键盘”。 - vikingosegundo
4个回答

53

你可以设置UITable view的属性(XCode 7+)

在Storyboard中:
In Storyboard

在代码中:

tableView.keyboardDismissMode = .onDrag

运行得非常好。 - Mendigo dos Bytes
有史以来最好的解决方案! - Joel Banzatto
伟大而简单的解决方案 - Vincent Gigandet
你应该成为美国总统。 - asanli

40
你可以添加 UIScrollViewDelegate。之后,你可以实现 scrollViewDidScroll 方法。

4
UITableView 继承自 UIScrollView,因此它应该是一个可滚动的视图控件。 - basvk

12

我相信完整的解决方案如下:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if scrollView == feedTableView {
        let contentOffset = scrollView.contentOffset.y
        print("contentOffset: ", contentOffset)
        if (contentOffset > self.lastKnowContentOfsset) {
            print("scrolling Down")
            print("dragging Up")
        } else {
            print("scrolling Up")
            print("dragging Down")
        }
    }
}

func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
    if scrollView == feedTableView {
        self.lastKnowContentOfsset = scrollView.contentOffset.y
        print("lastKnowContentOfsset: ", scrollView.contentOffset.y)
    }
}

之前的回答并不是100%准确。

说明:scrollViewDidEndDragging方法将在滚动停止时被调用,因此我们保存上一次的偏移量。之后,在委托方法scrollViewDidScroll中,我们将其与当前偏移量进行比较。


它是scrollView的最后已知偏移位置,用于与新位置进行比较。这将允许您识别移动。如在scrollViewDidScroll中所见@Dilip Tiwari - Giggs
你能帮我解决一个与@Giggs相关的问题吗? - Dilip Tiwari
我在处理TableView滚动方面遇到了问题 @Giggs - Dilip Tiwari
你有什么问题?@Dilip Tiwari - Giggs
无论如何,您能向我们展示如何获取或设置lastKnowContentOfset吗?@Giggs - Joe Sene
显示剩余3条评论

8
override func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {

        if(velocity.y>0){
            NSLog("dragging Up");
        }else{
            NSLog("dragging Down");
        }
    }

如何管理TableView的高度@Jamil,当调用NSLog("dragging Up");时。 - Dilip Tiwari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接