如何检测的UITableView的触动,似乎没有任何工作至今?(How to detect touc

2019-10-22 05:08发布

如何检测在触摸UITableView ? 我想在这个解决方案的线程 。 我有我tableViewscrollView中相同UIViewController有一个约束,所以它是复杂的子类tableView
该触摸方法是不叫:

class ViewController: UIViewController, UIScrollViewDelegate, UITableViewDataSource, UITableViewDelegate {

    @IBOutlet weak var verticalSpacing: NSLayoutConstraint!
    @IBOutlet weak var scrollView: UIScrollView!
    @IBOutlet weak var tableView: UITableView!


override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    super.touchesBegan(touches, withEvent: event)
    println("touch began")
}
override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {
    super.touchesMoved(touches, withEvent: event)
}
override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {
    super.touchesEnded(touches, withEvent: event)
    println("touch ended")
}
override func touchesCancelled(touches: NSSet!, withEvent event: UIEvent!) {
    super.touchesCancelled(touches, withEvent: event)
}

我说:

tableView.userInteractionEnabled = true
tableView.canCancelContentTouches = false //or true is the same

但它不会改变任何东西。 在scrollView在同一时间可见tableView ,但他们不重叠。

Answer 1:

有与该的UITableView检测更改滚动视图工作时,可以是有用的方法。 这些可能对你有用。

例如,

override func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
    println("Ended decelerating")
}

override func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) {
    println("Ended dragging")
}


Answer 2:

无子类需要!

只需添加一个手势识别,并确保包括一个呼叫cancelsTouchesInView

下面是斯威夫特的版本:

override func viewDidLoad() {
    super.viewDidLoad()
    view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "handleTap:"))
}

func handleTap(sender: UITapGestureRecognizer) {
    if sender.state == .Ended {
        // Do your thang here!
    }
    sender.cancelsTouchesInView = false
}

请享用!



Answer 3:

你的问题是, touchesBegan等也都是从方法UIView ,所以你需要或者子类UITableView或使用TapGestureRecognizer,使其工作就像你需要它。

它不应该太复杂子类UITableView ,因为你可以设置你的UITableView类作为类的的tableView在你的故事板,像你UIViewControllers等做



Answer 4:

你有没有尝试调整delaysContentTouches ? 这可能是因为,如果你按下足够长的时间你接触将与默认延迟登记。

要问,是有一个原因,你不能只使用didSelectRowAtIndexPath



Answer 5:

迟到了,但我需要来检测触摸上表中没有自来水 ,所以我结束了这一点:

fileprivate class TouchSensitiveTableView: UITableView {

    fileprivate var onTouchStart: (() -> ())? = nil
    fileprivate var onTouchEnd: (() -> ())? = nil

    public override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.onTouchStart?()
    }

    public override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.onTouchEnd?()
    }
}

然后,使用这样的

private let tableView = TouchSensitiveTableView()

viewDidLoad() {
    ....
    self.tableView.onTouchStart = {[weak self] in .... }
    self.tableView.onTouchEnd = {[weak self] in .... }

与表的滚动未成年人的互动,但nothng重大。



文章来源: How to detect touches on UITableView, nothing seems to work so far?