如何将按钮中的 panGesture 传递给 tableView? (斯威夫特 4)

Posted

技术标签:

【中文标题】如何将按钮中的 panGesture 传递给 tableView? (斯威夫特 4)【英文标题】:How to pass a panGesture in a button to a tableView? (Swift 4) 【发布时间】:2018-04-27 18:09:29 【问题描述】:

我有一个位于 tableView 标题内的 segmentedControl。当它拿起一个 panGesture 时,我希望它滚动封闭的 tableView,就好像我在桌子上的其他地方向上或向下滑动一样。

我添加了一个 panGesture:

let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(self.handlePanGesture(_:)))
segmentedControl.addGestureRecognizer(panGestureRecognizer)

唯一接近做我想做的事是以下。但它的行为与我正常滑动 tableView 的行为不同。 panGesture 完成后,tableView 不会移回原始位置。没有反弹。

@objc func handlePanGesture(_ panGesture: UIPanGestureRecognizer) 
    let translation = panGesture.translation(in: segmentedVotingControl)
    panGesture.setTranslation(CGPoint.zero, in: segmentedVotingControl)
        tableView.contentOffset = CGPoint(x: tableView.contentOffset.x, y: tableView.contentOffset.y - translation.y)

我也尝试过类似的方法,但它只是锁住了桌子。它不滚动:

segmentedVotingControl.addGestureRecognizer(tableView.panGestureRecognizer)

segmentedControl 上的常规“点击”手势是这样处理的:

@objc func segmentedVotingControlAction(sender: UISegmentedControl) 
     // actions to perform on tap

segmentedControl.addTarget(self, action: #selector(segmentedVotingControlAction(sender:)), for: .valueChanged)

有什么想法吗?我在正确的轨道上吗?看来我应该能够以某种方式将 panGesture 传递给 tableView。

【问题讨论】:

【参考方案1】:

您应该能够获取 panGesture 的值(移动的数量),然后将其传递给滚动 tableView 的函数,如下所示:

func scrollTableView(amount: CGFloat) 
    let point: CGPoint = CGPoint(x: 0.0, y: amount)
    tableView.setContentOffset(point, animated: true)

您需要测试动画是否应该为假。

【讨论】:

以上是关于如何将按钮中的 panGesture 传递给 tableView? (斯威夫特 4)的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Django 变量传递给 Javascript

单击按钮后如何将输入值(TKinter)传递给其他类中的函数并使用传递的值运行函数[重复]

如何将模型动作传递给 Tkinter MVC 中的查看按钮?

如何将点击的卡片按钮 id 传递给 vue.js 中的后端 URL 路径?

如何通过单击 TableCell 中的按钮将我的 TableCell 中的标签值传递给 TableViewController? [关闭]

UIControl 如何将所有触摸事件传递给响应者链中的下一个对象?