Obecnie używamy rozwiązania podobnego do wspomnianego here (patrz odpowiedź Aresa). To nie działa w iOS8.iOS8: Odrzuć arkusz formularza na zewnątrz kranu
Mam arkusz formularza i chcę go zamknąć, gdy tylko użytkownik kliknie w przyciemniony widok "za" arkuszem formularza Wcześniej wydawało się to możliwe, dodając do okna funkcję rozpoznawania gestów i sprawdzając lokalizację kliknięcia, aby sprawdzić, czy znajdował się poza bieżącym arkuszem formularza;
Zauważyłem również, że punkt musi zostać przekonwertowany (przełącznik X i Y) urządzenia jest używany w trybie poziomym. Poza tym, teraz odbiera tylko gesty, które pojawiły się z poziomu arkusza formularza, gdzie przed każdym naciśnięciem palca w dowolnym miejscu na ekranie wywołałoby zdarzenie.
- (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];
}
}
}
Nie jestem pewien co masz na myśli? W jaki sposób odzwierciedla zmiany API w ios8? Wspomniany kod działa dobrze w ios7. Czy jest to sposób na obejście błędu ios8? –
Aby opublikowany kod działał w iOS8, dodaj "UIGestureRecognizerDelegate" do swojego 'self.recognizer' i dodaj te delegowane metody. – Erich
Tak, to rozwiązało! Dzięki :) –