सब।
मेरे 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;