/ / चाइल्ड व्यू कंट्रोलर पर टॅाप जेस्चर को डिसेबल करें। यह कैसे निर्धारित किया जाए कि यह पैनग्रेस्चर या टैपग्योर है? - आईओएस, ऑब्जेक्टिव-सी, एक्सकोड, कोको-टच, यूजेस्टेक्चररोगिग्नर

चाइल्ड व्यू कंट्रोलर पर टैप जेस्चर अक्षम करें? यह कैसे निर्धारित करें कि यह एक PanGesture या TapGesture है? - आईओएस, उद्देश्य-सी, एक्सकोड, कोको-टच, uigesturerecognizer

सब।

मेरे iOS 8.0 ऐप में।

एक पैरेंट चाइल्ड व्यू आर्किटेक्चर में। इस कोड द्वारा ...

[self addChildViewController:slideTableViewController];
[self.view addSubview:slideTableViewController.view];
[slideTableViewController didMoveToParentViewController:self];

मैंने बेस व्यू कंट्रोलर पर TapGesturerecognizer और PanGesturerecognizer को लागू किया है।

ताकि, यह पैन (ड्रैगिंग) और टैप को पहचान सके। मुझे अपने बेस व्यू पर दोनों इशारों की आवश्यकता है।

बस टैप जेस्चर नहीं चाहिए SlideView। जैसा कि मैं चाहता था कि बच्चे के दृष्टिकोण पर doSelectRowAtIndexpath पद्धति निष्पादित करें,

उपाय:

प्रश्न 1 का उत्तर: कई StackOverflow जवाब एक ही funda है .. जब आपका स्पर्श बच्चे के दृश्य का सामना करता है तो इशारे को अक्षम करें।

if([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]){
if(CGRectContainsPoint(slideTableViewController.view.frame,[touch locationInView:self.view])){
return NO;
}
}

प्रश्न 2 का उत्तर:

यह कैसे निर्धारित किया जाए कि यह पैनग्रेस्चर या टैपग्योर है?

के लिये से प्रत्येक इशारा प्रकार प्रतिनिधि पद्धति को बुलाएगा

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

यदि आपने अपने दृष्टिकोण में दो इशारों को लागू किया है, पैन जेस्चर और टच जेस्चर,

यह विधि 2 बार, पैन जेस्चर के लिए 1 बार और टैप जेस्चर के लिए 1 बार कॉल करेगी।

तो, इस विधि में आप की तरह देख सकते हैं isKindOfClass तरीका।

मदद करने के लिए बहुत बहुत धन्यवाद ......

यहां छवि विवरण दर्ज करें

उत्तर:

जवाब के लिए 2 № 1

आप अपने में इशारा पद्धति को लागू कर सकते हैं baseViewController :

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizershouldReceiveTouch:(UITouch *)touch {
return touch.view == self.view;
}

या // अगर यह एक टैप जेस्चर है और आपका टच एक पर्टिकुलर व्यू के साथ इंटरसेक्ट करता है, तो इसके लिए हमारे पास यह तरीका है।

if([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]){
if(CGRectContainsPoint(slideTableViewController.view.frame,[touch locationInView:self.view])){
return NO;
}
}

जवाब के लिए 4 № 2

बस सेट करें tapGesture.cancelsTouchesInView = YES;


जवाब के लिए 0 № 3

मैंने UIViews में यह किया है मुझे आशा है कि यह आपकी मदद कर सकता है:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{

UITouch *touch = [touches anyObject];
[touch locationInView:self.view];
if(touch.view == self.topView )
{
//just return
}
if(touch.view == SOSTopView )
{
//just return
}
}

जवाब के लिए 0 № 4

लगता है कि आपको इस तरीके को लागू करना चाहिए UITableViewDelegate:

- (NSIndexPath *)tableView:(UITableView *)tableView
willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// you can add some logic here
return nil;
}

यह किसी भी पंक्तियों को चुनने से रोकेगा।


उत्तर के लिए -1 № 5

Isn "वहाँ नहीं है userInteractionEnabled संपत्ति है कि आप का उपयोग कर सकते हैं? तो आप निम्नलिखित कर सकते हैं:

slideTableViewController.userInterationEnabled = NO;