UIPageViewController按钮阻止滑动

时间:2019-07-11 18:06:19

标签: ios swift uiscrollview uibutton uipageviewcontroller

我的UIPageViewController上有一些UIButton用于翻页。

如果当我的初始触摸落在按钮之一上时尝试通过滑动来切换页面,则该按钮会阻止滚动视图接收手势,从而实质上阻止了页面滚动。

无论如何,是否可以轻按按钮,但如果滑动视图也可以滚动滚动视图?

谢谢!

2 个答案:

答案 0 :(得分:0)

如何使用视图或图像然后使用点击手势识别器进行设置?

答案 1 :(得分:0)

这可能对您有用...

  • 将按钮添加为滚动视图的子视图
  • 将滚动视图的类设置为PassTouchScrollView
  • 将按钮的顶部限制在滚动视图的顶部,并使用一个常量将其垂直放置在所需的位置
  • 保存原始常量,并在滚动视图滚动以将按钮保持在其原始y位置时进行更新

这里是一个例子。照常设置滚动视图及其内容子视图。将按钮添加为子视图,并将其限制在滚动视图的顶部(而不是其最近的邻居)。将滚动视图的类设置为PassTouchScrollView,然后通过@IBOutlet进行连接。通过@IBOutlet连接顶部约束。最后,将按钮的touchUpInside连接到@IBAction

class PassTouchScrollView: UIScrollView {

    override func touchesShouldCancel(in view: UIView) -> Bool {
        if type(of: view) == UIButton.self {
            return true
        }

        return super.touchesShouldCancel(in: view)

    }

}

class PassThroughTestViewController: UIViewController, UIScrollViewDelegate {

    @IBOutlet var theScrollView: PassTouchScrollView!

    // constraint from top of button to top of scroll view
    @IBOutlet var theButtonTopConstraint: NSLayoutConstraint!

    var origTop: CGFloat = CGFloat(0)

    override func viewDidLoad() {
        super.viewDidLoad()

        theScrollView.delegate = self

        // save the original top constraint constant
        origTop = theButtonTopConstraint.constant
    }

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        // when scrolling, update the top constraint to keep the button in-place
        theButtonTopConstraint.constant = origTop + scrollView.contentOffset.y
    }

    @IBAction func didTap(_ sender: Any) {
        print("tapped")
    }

}