【问题标题】:UITapGestureRecognizer won't work in UIScrollViewUITapGestureRecognizer 在 UIScrollView 中不起作用
【发布时间】:2016-09-25 01:26:59
【问题描述】:

我有一个启用了分页的UIScrollView,其中包含两个视图控制器:vc0、vc1。滚动视图包含在一个 UIView(称为“dummyView”)中,它包含在它自己的视图控制器中。

问题是当包含滚动视图的视图控制器设置为初始视图控制器时,vc1 不响应触摸。但是,如果将 vc1 设置为初始视图控制器,则 vc1 可以很好地响应触摸事件

为什么通过scrollView查看vc1不响应触摸?

我已经包含了包含滚动视图的视图控制器的 viewdidLoad(),我在其中设置了滚动视图及其所有子视图。

import UIKit

class ViewController: UIViewController, UIGestureRecognizerDelegate {

@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var dummyView: UIView!

override func viewDidLoad() {
    super.viewDidLoad()

    scrollView.contentSize = CGSizeMake(self.view.frame.width * 2, self.view.frame.height);
    dummyView.frame.size = scrollView.contentSize

    createConstraintsForDummyView()

    let vc0 = self.storyboard?.instantiateViewControllerWithIdentifier("vc0") as! ViewController0

    self.addChildViewController(vc0)
    self.dummyView.addSubview(vc0.view)
    vc0.didMoveToParentViewController(self)

    createConstraintsForVC0(vc0)

    let vc1 = self.storyboard?.instantiateViewControllerWithIdentifier("vc1")

    var frame1 = vc1!.view.frame
    frame1.origin.x = self.view.frame.size.width
    vc1!.view.frame = frame1

    self.addChildViewController(vc1!)
    self.dummyView.addSubview(vc1!.view)
    vc1!.didMoveToParentViewController(self)

    createConstraintsForVC1(vc1)     
}

编辑:我已经包含了 vc1 的类

import UIKit

class ViewController1: UIViewController, UIGestureRecognizerDelegate {

func handleTap(recognizer: UITapGestureRecognizer){
    print("Tapped!")
}

override func viewDidLoad() {
    super.viewDidLoad()

    let tap = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:)))
    tap.delegate = self
    self.view.addGestureRecognizer(tap)

    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}
}

【问题讨论】:

  • 在哪里以及如何添加 TapRec
  • 我是直接加到vc0.view的。我在 vc1 的 viewDidLoad() 中以编程方式完成了它。但即使是 vc0 的 touchesBegan() 也不起作用
  • vc0的viewDidLoad是否被调用。
  • 对不起,我的意思是说 vc1 对触摸和点击没有响应。然而,vc0 正在响应。 vc0 和 vc1 的 viewDidLoad 都被调用了
  • 对选择器使用新的 Swift 语法:#selector(handleTap)

标签: ios swift uiviewcontroller uiscrollview uigesturerecognizer


【解决方案1】:

如讨论here

dummyView 引起了问题。
解决办法是去掉dummyView,改用scrollView

【讨论】:

    猜你喜欢
    • 2019-09-17
    • 2013-07-17
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    相关资源
    最近更新 更多