2011-09-28 11 views
10

के अंदर UITableViewCell पर स्वाइप जेश्चर का पता लगाना मुझे उम्मीद है कि कोई इस समस्या में मेरी मदद कर सकता है जो इस समय मेरे सिर कर रहा है!UIScrollViewCell

निम्नलिखित दृश्य पदानुक्रम

enter image description here

मैं अपने कस्टम UITableViewCell पर स्वाइप जेस्चर पता लगाने में सक्षम होना चाहता हूँ को देखते हुए।

मैं UIScrollView subclassed और एक hitTest किया है: withEvent: विधि है कि जांच करता है कि मैं tableview सेल (या इसकी सामग्री) है या नहीं, इस मामले में मैं निम्नलिखित स्क्रॉल दृश्य गुण सेट को छू रहा हूँ:

- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    UIView* result = [super hitTest:point withEvent:event]; 
    if ([result.superview isKindOfClass:[UITableViewCell class]] || [result.superview tag] == SUBVIEW_TAG) 
    { 
     self.canCancelContentTouches = NO; 
     self.delaysContentTouches = YES; 
    } else { 
     self.canCancelContentTouches = YES; 
     self.delaysContentTouches = NO; 
    } 
    return result; 
} 

मैं भी लागू कर दिया है:

- (BOOL)touchesShouldCancelInContentView:(UIView *)view 
{ 
    if (view.tag == SUBVIEW_TAG || [[view superview] isKindOfClass:[UITableViewCell class]]) 
     return NO; 
    return YES; 
} 

और मामले में कोई लौटने हूँ दृश्य स्पर्श किया जा रहा तालिका दृश्य सेल है।

ये विधियां सभी को कॉल के रूप में बुलाया जा रहा है और उम्मीद कर रहा है, लेकिन मैं अभी भी UIScrollView को स्वाइप जेश्चर "होगिंग" से रोकने में असमर्थ हूं।

दिलचस्प बात यह है कि यदि मैं UIView को शामिल करता हूं जिसमें उपरोक्त दोनों विधियों (SUBVIEW_TAG वाला एक) पर टेबलव्यू और सेल शामिल है, तो यह पूरी तरह से काम करता है, इसलिए मुझे लगता है कि यह इस तथ्य के साथ कुछ होना चाहिए कि UITableView UIScrollView से विरासत।

मेरा मुख्य लक्ष्य सेल पर अधिक विकल्प प्रकट करने के लिए सेल पर स्वाइप करने में सक्षम होना है। उस दृश्य पर कहीं और क्षैतिज स्वाइप स्क्रॉल दृश्य द्वारा कब्जा कर लिया जाएगा और सामग्री को सामान्य व्यवहार के अनुसार क्षैतिज रूप से स्थानांतरित कर दिया जाएगा।

किसी भी विचार की बहुत सराहना की जाएगी!

धन्यवाद! रोग

+0

UITableViewCell करने के लिए एक इशारा पहचानकर्ता जोड़ने के लिए पर्याप्त नहीं है? – teriiehina

+0

क्या आपने कभी इसे हल किया है? यदि हां, तो क्या आप अपना समाधान साझा करना चाहते हैं? आपने समस्या को बहुत अच्छी तरह से और उत्कृष्ट विस्तार से वर्णित किया है - इसी तरह का उत्तर शानदार होगा! – iOSProgrammingIsFun

+0

हाँ, इसके लिए एक समाधान अद्भुत होगा – Pasta

उत्तर

2

मैं एक कड़ी चोट के साथ एक समान समस्या एक scrollview के अंदर एक घटक के लिए पता लगाने के लिए किया था और मैं साथ

[scrollView.panGestureRecognizer requireGestureRecognizerToFail:swipeGesture] 

कहाँ scrollview कि कंटेनर और swipeGesture की तरह काम करता स्क्रॉल दृश्य वस्तु है इसे हल करने में सक्षम था स्क्रॉलव्यू के अंदर घटक जेस्चर ऑब्जेक्ट स्वाइप करें।

तो, अगर आप इस तरह सेल वस्तु के लिए एक कड़ी चोट (दाएं स्वाइप के लिए उदाहरण में, यह कस्टम के रूप में आप चाहते हैं)

UISwipeGestureRecognizer* rightSwipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(yourMethod)]; 
     [rightSwipeRecognizer setDirection:UISwipeGestureRecognizerDirectionLeft]; 

[cell addGestureRecognizer:rightSwipeRecognizer]; 

परिभाषित कर सकते हैं और फिर

[scrollView.panGestureRecognizer requireGestureRecognizerToFail:rightSwipeRecognizer] 

कर प्रलेखन requireGestureRecognizerToFail का कहना है:

यह विधि किसी अन्य इशारा पहचानकर्ताके साथ संबंध बनाता हैजो UIGestureRecognizerStatePossible से रिसीवर के संक्रमण को देरी करता है।राज्य कि रिसीवर बदलाव करने के लिए क्या otherGestureRecognizer के साथ होता है पर निर्भर करता है:

otherGestureRecognizer बदलाव तो UIGestureRecognizerStateFailed करने के लिए, अपनी सामान्य अगले राज्य के लिए रिसीवर संक्रमण।

अगर otherGestureRecognizer UIGestureRecognizerStateRecognized या UIGestureRecognizerStateBegan, UIGestureRecognizerStateFailed को रिसीवर बदलाव करने के लिए संक्रमण।

एक उदाहरण जहां यह विधि कहा जा सकता है वह है जब आप सिंगल-टैप जेस्चर की आवश्यकता होती है कि डबल-टैप इशारा विफल हो।

उपलब्धता आईओएस 3.2 और बाद में उपलब्ध है।

आशा मदद करता है!

2

समाधान बहुत आसान है। आपको केवल U12crollView के अंदर UITableViewCell जोड़ने की आवश्यकता है। यह स्वाइप जेश्चर के दौरान "होगिंग" प्रभाव को रोक देगा।

Embedded UIScrollView