2014-09-02 14 views
8

Şu an için belirtilen here benzeri bir çözüm kullanıyoruz (bkz. Ares'in yanıtı). Bu iOS8'de çalışmıyor gibi görünüyor.iOS8: Dış sayfadaki form kağıdını kapatın

Bir form sayfam var ve kullanıcı form sayfasının "arkasındaki" kısılmış görünüme dokunduğunda onu kapatmak istiyorum. Önceden, bu, pencereye bir hareket tanıtıcısı ekleyerek ve geçerli form sayfasının dışında olup olmadığını görmek için konum konumunu denetleyerek mümkün görünüyordu;

Ayrıca, cihazın dönüştürülmesi gereken noktanın (x ve y anahtarı) yatay modda kullanıldığını fark ettim. Bunun dışında, şu anda sadece, form sayfasının içinde meydana gelen ve ekranın herhangi bir yerinde herhangi bir dokunma hareketinin bir olayı tetikleyeceği jestleri alır. Eğer başvurulan parçacığı içinde belirtildiği gibi

- (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]; 
     } 
    } 
} 

cevap

10

, bir UIGestureRecognizerDelegate eklemek ve yöntemleri uygulamalıdır:

- (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

Ne demek istediğini emin değilim? Bu, ios8'deki API değişikliklerini nasıl yansıtır? Bahsedilen kod ios7'de gayet iyi çalışıyor. Yoksa bu bir ios8 hatasını atlatmanın bir yolu mu? –

+0

Gönderdiğiniz kodun iOS8'de çalışmasını sağlamak için, 'self.recognizer 'öğenize bir' UIGestureRecognizerDelegate' ekleyin ve bu delege yöntemlerini ekleyin: – Erich

+0

Yup, bunu çözdü! Teşekkürler :) –