2014-09-02 5 views
8

Wir verwenden derzeit eine ähnliche Lösung wie die bereits erwähnte here (siehe Ares's Antwort). Dies scheint nicht in iOS8 zu funktionieren.iOS8: Formularblatt am Außenhahn ablehnen

Ich habe ein Formularblatt, und ich möchte es ablehnen, sobald der Benutzer auf die abgeblendete Ansicht 'hinter' das Formularblatt antippt. Bisher schien dies möglich zu sein, indem dem Fenster eine Gestenerkennung hinzugefügt wurde und die Tippposition überprüft wurde, um festzustellen, ob sie sich außerhalb des aktuellen Formularblattes befand.

Ich bemerkte auch, dass der Punkt konvertiert werden muss (Schalter x und y) des Geräts im Querformat verwendet wird. Ansonsten erhält es im Moment nur Gesten, die von innerhalb des Formulars kommen, wo vor jeder Tippgeste irgendwo auf dem Bildschirm ein Ereignis ausgelöst würde.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapBehind:)]; 
    self.recognizer.numberOfTapsRequired = 1; 
    self.recognizer.cancelsTouchesInView = NO; 
    [self.view.window addGestureRecognizer:self.recognizer]; 
} 

- (void)handleTapBehind:(UITapGestureRecognizer *)sender 
{ 
    if (sender.state == UIGestureRecognizerStateEnded) 
    { 
     CGPoint location = [sender locationInView:nil]; 
     if (UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation) && IOS8) 
     { 
      location = CGPointMake(location.y, location.x); 
     } 

     // if tap outside pincode inputscreen 
     BOOL inView = [self.view pointInside:[self.view convertPoint:location  fromView:self.view.window] withEvent:nil]; 
     if (!inView) 
     { 
      [self.view.window removeGestureRecognizer:sender]; 
      [self dismissViewControllerAnimated:YES completion:nil]; 
     } 
    } 
} 

Antwort

10

Wie im Thread erwähnt Sie Bezug genommen wird, sollten Sie eine UIGestureRecognizerDelegate und Umsetzung der Methoden hinzufügen:

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { 
    return YES; 
} 

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { 
    return YES; 
} 

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    return YES; 
} 
+0

Ich bin nicht sicher, was du meinst? Wie spiegelt dies API-Änderungen in ios8 wider? Der genannte Code funktioniert in ios7 einwandfrei. Oder ist das ein Weg, einen ios8 Bug zu umgehen? –

+0

Damit der von Ihnen gepostete Code in iOS8 funktioniert, fügen Sie Ihrem 'self.recognizer' ein' UIGestureRecognizerDelegate' hinzu und fügen Sie diese Delegiertenmethoden hinzu – Erich

+0

Yup, das hat es gelöst! Danke :) –