UITapGestureRecognizer 无法在 UIScrollView 中工作
UITapGestureRecognizer won't work in UIScrollView
我有一个启用了分页的 UIScrollView
,它包含两个视图控制器:vc0、vc1。滚动视图包含在一个 UIView(称为 "dummyView")中,它包含在它自己的视图控制器中。
问题是当包含滚动视图的视图控制器设置为初始视图控制器时,vc1 不响应触摸。但是,如果将 vc1 设置为初始视图控制器,vc1 会很好地响应触摸事件
为什么vc1通过scrollView查看时没有触摸响应?
我已经包含了包含滚动视图的视图控制器的 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
添加了 class
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
}
}
如讨论的那样here
dummyView
引起了问题。
解决方案是删除 dummyView
并改用 scrollView
。
我有一个启用了分页的 UIScrollView
,它包含两个视图控制器:vc0、vc1。滚动视图包含在一个 UIView(称为 "dummyView")中,它包含在它自己的视图控制器中。
问题是当包含滚动视图的视图控制器设置为初始视图控制器时,vc1 不响应触摸。但是,如果将 vc1 设置为初始视图控制器,vc1 会很好地响应触摸事件
为什么vc1通过scrollView查看时没有触摸响应?
我已经包含了包含滚动视图的视图控制器的 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
添加了 classimport 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
}
}
如讨论的那样here
dummyView
引起了问题。
解决方案是删除 dummyView
并改用 scrollView
。