2014-09-02 11 views
8

पर फॉर्म शीट को खारिज करें वर्तमान में हम here (एरेस के उत्तर देखें) के समान समाधान का उपयोग कर रहे हैं। यह आईओएस 8 में काम नहीं कर रहा है।आईओएस 8: बाहरी टैप

मेरे पास एक फॉर्म शीट है, और जैसे ही उपयोगकर्ता फॉर्म शीट के पीछे 'मंद' दृश्य पर टैप करता है, मैं इसे खारिज करना चाहता हूं। पहले, विंडो में एक इशारा पहचानकर्ता जोड़कर यह संभव लग रहा था, और यह देखने के लिए टैप-स्थान की जांच कर रहा था कि यह वर्तमान फॉर्म शीट के बाहर था या नहीं;

मैंने यह भी देखा कि डिवाइस को परिवर्तित करने की आवश्यकता है (डिवाइस का स्विच एक्स और वाई) लैंडस्केप मोड में उपयोग किया जाता है। इसके अलावा, अभी यह केवल फॉर्म शीट के अंदर से होने वाले संकेत प्राप्त करता है, जहां स्क्रीन पर कहीं भी टैप इशारा होने से पहले एक ईवेंट ट्रिगर होगा।

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

उत्तर

10

के रूप में धागा आप संदर्भित में उल्लेख किया है, तो आप एक UIGestureRecognizerDelegate जोड़ सकते हैं और तरीकों को लागू करना चाहिए:

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

मुझे यकीन है कि तुम क्या मतलब है नहीं कर रहा हूँ? यह आईओएस 8 में एपीआई परिवर्तन कैसे दर्शाता है? उल्लिखित कोड ios7 में ठीक काम करता है। या यह एक ios8 बग को रोकने के लिए एक तरीका है? –

+0

आपके द्वारा पोस्ट किए गए कोड को आईओएस 8 में काम करने के लिए, अपने 'self.recognizer' पर' UIGestureRecognizerDelegate' जोड़ें और इन प्रतिनिधि विधियों को – Erich

+0

Yup जोड़ें, जो हल हो गया है! धन्यवाद :) –