2

Ich habe eine UIScrollView mit Paging aktiviert, die zwei View-Controller enthält: vc0, vc1. Der scrollview ist in einer UIView ("dummyView") enthalten, die in einem eigenen View-Controller enthalten ist.UITapGestureRecognizer funktioniert nicht in UIScrollView

Das Problem besteht darin, dass VC1 nicht auf Berührungen reagiert, wenn der Ansichtscontroller, der den Bildlauf enthält, auf den ursprünglichen Ansichtscontroller eingestellt ist. Wenn vc1 jedoch auf den anfänglichen Ansichtssteuerungscontroller eingestellt ist, reagiert vc1 auf Berührungsereignisse gerade fein

Warum reagiert vc1 nicht auf Berührungen, wenn es durch das scrollView betrachtet wird?

Ich habe die ViewdidLoad() der View-Controller, die die Scrollview enthält, wo ich die Scrollview und alle seine Unteransichten eingerichtet.

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)  
} 

EDIT: ich die Klasse für VC1 aufgenommen haben

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 
} 
} 
+0

Wo und wie Sie die TapRec – 123FLO321

+0

hinzufügen Ich habe es direkt zu vc0.view hinzugefügt. Ich habe es programmatisch in ViewDidLoad() von vc1 gemacht. Aber auch die touchesBegan() für vc0 funktioniert nicht – Lahav

+0

Wird der viewDidLoad von vc0 aufgerufen. – 123FLO321

Antwort

1

Wie diskutiert here

Die dummyView wurde Probleme zu verursachen.
Die Lösung ist, die dummyView zu entfernen und stattdessen die scrollView zu verwenden.