मेरे समस्या इस मुद्दे का सुपरसेट था - मैं UITableViewCells अंदर UISliders मिल गया है और पूरे UITableView एक UIScrollView के अंदर एक पेज है। स्लाइडर अन्य दो के साथ बातचीत पर विनाश को तोड़ रहे थे और सबक्लासिंग समाधान काम नहीं कर पाए। यहां मैं यह काम कर रहा हूं कि यह महान काम कर रहा है: स्लाइडर आगे बढ़ते समय अधिसूचनाएं भेजें और UITableView और UIScrollView अक्षम करें इस समय के दौरान स्क्रॉलिंग करें। नीचे दी गई तस्वीर में ध्यान दें: मेरे स्लाइडर्स क्षैतिज हैं, मेरा टेबलव्यू लंबवत है, और मेरे UIScrollView में क्षैतिज पृष्ठ हैं।

UITableViewCell प्रोग्राम के रूप में रूप से बनाए गए स्लाइडर के लिए घटनाओं को चुनता है:
self.numberSlider = [[UISlider alloc] init];
[self.numberSlider addTarget:self action:@selector(sliderValueChanged:) forControlEvents:UIControlEventValueChanged];
[self.numberSlider addTarget:self action:@selector(sliderTouchDown:) forControlEvents:UIControlEventTouchDown];
[self.numberSlider addTarget:self action:@selector(sliderTouchUp:) forControlEvents:UIControlEventTouchUpInside];
[self.numberSlider addTarget:self action:@selector(sliderTouchUp:) forControlEvents:UIControlEventTouchUpOutside];
इस ट्यूटोरियल के प्रयोजनों के लिए, हम केवल टचडाउन और ऊपर के बारे में परवाह:
- (void)sliderTouchDown:(UISlider *)sender
{
[[NSNotificationCenter defaultCenter] postNotificationName:NOTIFY_SLIDER_TOUCH_BEGAN object:nil];
}
- (void)sliderTouchUp:(UISlider *)sender
{
[[NSNotificationCenter defaultCenter] postNotificationName:NOTIFY_SLIDER_TOUCH_ENDED object:nil];
}
अब, हम UITableView दोनों में इन अधिसूचनाओं को पकड़ते हैं (ध्यान दें कि तालिकादृश्य वीसी में है लेकिन मुझे यकीन है कि यह काम करेगा यदि आप subcl assed):
- (void)viewDidLoad
{
// other stuff
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sliderTouchDown:) name:NOTIFY_SLIDER_TOUCH_BEGAN object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sliderTouchUp:) name:NOTIFY_SLIDER_TOUCH_ENDED object:nil];
}
- (void)sliderTouchDown:(NSNotification *)notify
{
self.treatmentTableView.scrollEnabled = NO;
}
- (void)sliderTouchUp:(NSNotification *)notify
{
self.treatmentTableView.scrollEnabled = YES;
}
और UIScrollView (समान रूप से ऊपर, एक कुलपति में संलग्न):
- (void)viewDidLoad
{
// other stuff
// Register for slider notifications
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(disableScrolling:) name:NOTIFY_SLIDER_TOUCH_BEGAN object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(enableScrolling:) name:NOTIFY_SLIDER_TOUCH_ENDED object:nil];
}
- (void)disableScrolling:(NSNotification *)notify
{
self.scrollView.scrollEnabled = NO;
}
- (void)enableScrolling:(NSNotification *)notify
{
self.scrollView.scrollEnabled = YES;
}
मैं एक और अधिक सुरुचिपूर्ण समाधान जानकर अच्छा लगेगा, लेकिन यह एक निश्चित रूप से काम किया जाता है । जब आप एक स्लाइडर का उपयोग करते हैं, तो तालिका और स्क्रॉलव्यू अभी भी पकड़ते हैं और जब आप स्लाइडर के बाहर क्लिक करते हैं, तो टेबलव्यू और स्क्रॉलव्यू अपेक्षित के रूप में स्थानांतरित होते हैं। साथ ही - ध्यान दें कि मैं इस समाधान में सभी 3 घटकों के गैर-उप-वर्गीकृत उदाहरणों का उपयोग कर सकता हूं। उम्मीद है कि यह किसी की मदद करता है!
स्रोत
2014-01-22 00:43:16
धन्यवाद, इसके साथ समाप्त हो गया। हालांकि, एक और विषमता ... यह व्यवहार केवल सिम्युलेटर पर प्रकट होना प्रतीत होता था। एक बार जब मैं इसे डिवाइस पर मिला तो यह ठीक किए बिना ठीक काम करता था। – MarkPowell
दिलचस्प, परीक्षण के लिए सिम्युलेटर पर भरोसा न करने का एक अन्य कारण ... – BoltClock
FWIW, मैं सिम्युलेटर (आईओएस 6) और डिवाइस (आईओएस 5.1) दोनों पर बिल्कुल वही व्यवहार (मूल प्रश्न में वर्णित) देख रहा हूं। मुझे स्लाइडर खींचने से पहले एक पल टैप करना और पकड़ना है, अन्यथा मुझे इसके बजाय स्क्रॉल व्यू ड्रैग मिलता है। –