2013-08-01 16 views
6

Es scheint, dass die Taste nicht gedrückt wird.Wie kann ein UIViewController in einem UIPageController Berührungsereignisse erhalten?

Ich habe versucht:

UIPageViewController Gesture recognizers

jedoch hier der Haken ist

wenn Seitenübergang von UIPageViewController ist UIPageViewControllerTransitionStyleScroll dann

self.view.gestureRecognizers = self.pageViewController.gestureRecognizers; 
NSLog(@"%@",self.pageViewController.gestureRecognizers.description); 
NSLog(@"%@",self.pageViewController.gestureRecognizers.description); 

einfach leer sein.

Ich hat versucht, meinen eigenen gestureRecoqnizers statt Taste in die Subview des UIViewControllers Zugabe. Es funktioniert immer noch nicht.

So habe ich eine UIPageViewController, die eine UIViewController, deren Ansicht angezeigt wird einige Tasten hat. Wie bekomme ich diesen Knopf gedrückt?

Ich habe auch versucht, beide Lösungen hier:

http://emlyn.net/posts/stopping-gesture-recognizers-in-their-tracks

Keine funktioniert. Zuallererst kann ich Gestenerkenner des UIPageViewControllers nicht deaktivieren, weil es so etwas nicht gibt. Im ScrollView-Modus verfügt UIPageViewController nicht über Gestenerkenner.

Ich versuchte, meine eigene Geste recoqnizers meine eigene Taste hinzufügen, aber diese werden nie genannt.

Ich möchte, dass der UIPageViewController immer noch Swipe handhaben. Aber nicht tippen.

Ich kann die Geste recoqnizers von UIPageViewControllers zugreifen, da self.pageViewController.gestureRecognizers leer. Der UIPageViewController scheint alle Tap-Ereignisse zu "absorbieren". Also mein Knopf versteht es nicht.

Ich kann Button vor UIPageViewController hinzufügen, aber die Schaltfläche wird die Durchzugs Aktion aufnehmen, die ich UIPageVIewController wollen Griff noch.

Durch die Art und Weise, wenn wir die Vorlage von IOS (Erstellen Sie eine Seite basierte Anwendung, und ändern Sie den Übergang der pageviewcontroller.gesturerecoqnizers wird blättern verwendet

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    // Configure the page view controller and add it as a child view controller. 
    self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];//Turn this to scroll view 
    self.pageViewController.delegate = self; 

    SDDataViewController *startingViewController = [self.modelController viewControllerAtIndex:0 storyboard:self.storyboard]; 
    NSArray *viewControllers = @[startingViewController]; 
    [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:NULL]; 

    self.pageViewController.dataSource = self.modelController; 

    [self addChildViewController:self.pageViewController]; 
    [self.view addSubview:self.pageViewController.view]; 

    // Set the page view controller's bounds using an inset rect so that self's view is visible around the edges of the pages. 
    CGRect pageViewRect = self.view.bounds; 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { 
     pageViewRect = CGRectInset(pageViewRect, 40.0, 40.0); 
    } 
    self.pageViewController.view.frame = pageViewRect; 

    [self.pageViewController didMoveToParentViewController:self]; 

    // Add the page view controller's gesture recognizers to the book view controller's view so that the gestures are started more easily. 
    self.view.gestureRecognizers = self.pageViewController.gestureRecognizers; 
    NSLog(@"%@",self.pageViewController.gestureRecognizers.description); //This is empty 
    while (false); 
} 
+0

Ist die Schaltfläche, um ein Ziel und Wirkung hat? – Wain

+0

natürlich. Ich habe das richtig verstanden. Es funktioniert gut, wenn nicht in UIPageViewController. –

+0

Warum also die Gestenerkennung? Und haben Sie Ihren Controller als Delegat festgelegt und überprüft, ob die Delegate-Methoden aufgerufen wurden? – Wain

Antwort

0

Vielleicht leer sein können Sie eine benutzerdefinierte Gestenerkenner einrichten . in Ihrem UIPageViewController auf diese Weise werden Sie in der Lage sein, durch UITouch Ereignisse zu filtern, indem Sie diese in Ihrem Gestenerkenner delegieren Implementierung (die für Ihre UIPageViewController):

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gesture shouldReceiveTouch:(UITouch *)touch {    

if (touch.tapCount > 1) { // It will ignore touch with less than two finger 
     return YES; 
    } 
    return NO; 
} 

Dies wird Ihnen die UIPageViewController g estureRecognizer kümmert sich nicht um Berührung mit einem Finger. Sie müssen es versuchen, aber ich denke, es könnte den Trick tun. Das Problem hierbei ist, dass Sie haben Ihre Benutzer für einen Zwei-Finger-Swipe fragen ...

prüft here für eine andere Antwort