UITableView didSelectRowAtIndexPath: पहले टैप पर कॉल नहीं किया जा रहा है


352

मैं एक मुद्दा रहा हूँ UITableView's didSelectRowAtIndexPath

मेरी तालिका सेटअप है ताकि जब मैं पंक्ति का चयन करूँ तो यह एक नए दृश्य नियंत्रक को इनिशियलाइज़ करता है और इसे पुश करता है।

पहली बार जब मैं तालिका में किसी पंक्ति को टैप करता हूं, तो विधि को कॉल नहीं किया जाता है। एक बार जब मैं दूसरी पंक्ति का चयन करता हूं, तो यह सामान्य रूप से काम करना शुरू कर देता है।

मैंने एक ब्रेकपॉइंट सेट करके इसे सत्यापित किया है didSelectRowAtIndexPathNSLogविधि में जोड़ते समय मैं देखता हूं कि जब मैं दूसरी पंक्ति का चयन करता हूं जो अंत में नए दृश्य नियंत्रक को धक्का देती है, तो मुझे एक ही समय में कंसोल में दो लॉग स्टेटमेंट दिखाई देते हैं।

कोई सुझाव?


2
क्या आप अपना कोड पोस्ट कर सकते हैं tableView:didSelectRowAtIndexPath:?
gerry3

मुझे भी यही समस्या थी, मेरे उत्तर की जाँच करें: stackoverflow.com/a/44097559/1600061
Zsivics Sanel

1
मुख्य कतार में डिस्पैच ने मेरी समस्या का हल किया stackoverflow.com/questions/20149167/…
durgeshtrivedi

जवाबों:


1356

कोई भी मौका जिससे आपने गलती से De SelectRowAtIndexPath टाइप किया है ?


17
@Dschee इसे पहले टैप पर नहीं बुलाया गया है क्योंकि आप किसी चीज़ का चयन रद्द नहीं कर रहे हैं। एक बार जब आप एक पंक्ति का चयन करते हैं, तो जब आप एक दूसरे का चयन करने का प्रयास करते हैं, तो पहले का चयन रद्द हो जाता है।
यार

19
इसलिए मैंने एसओ को प्यार किया।
पुनर्निर्माण करें

4
मैंने इसे गलत ठहराया क्योंकि मैंने एक बार यह गलती की है। मैंने उकसाया क्योंकि मैंने इस गलती को केवल 4 वर्षों में 4 बार से कम नहीं किया है, इतना समय खर्च किया है।
ब्रूक्स हान्स

8
हे भगवान!! यह सबसे खराब बग हो सकता है जिसे मैंने अपने कोड में पेश किया है।
शांतनु पॉल

4
वाह। मुझे इतना समय बचाया।
मॉर्टलमैन

24

अपने टेबल व्यू की चयन संपत्ति को xib फ़ाइल में देखें। आवश्यकतानुसार 'एकल चयन' या 'एकाधिक चयन' का उपयोग करें।


2
बा हा हा हा! वाह मैं 4 घंटे बिताए यह पता लगाने की कोशिश कर रहा है। @includeMe को बचाव के लिए (सलाम)! धन्यवाद!

17

मैंने निम्नलिखित समस्या का अनुभव किया:

  • पहली पंक्ति में नल -> कोई प्रभाव नहीं, कोई चयन नहीं , कभी नहीं
  • दूसरा नल और निम्नलिखित -> सही चयन व्यवहार, हमेशा

मेरे मामले में, मेरी त्रुटि Show Selection on Touchइंटरफ़ेस बिल्डर में जाँच कर रही थी । आप इसे आईबी में यहाँ अनचेक कर सकते हैं:

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

आशा है कि किसी की मदद करता है


आप मेरे हीरो हैं! किसी भी विचार क्यों यह डिफ़ॉल्ट है? मैं उस व्यवहार वाले किसी भी ऐप के बारे में नहीं सोच सकता और मुझे लगता है कि यह बहुत ही अजीब डिफ़ॉल्ट है।
क्रिस्टोफ़ फोंडेशिक

12

जांचें कि क्या आपने अपनी कक्षा में कोई भी जेस्चर पहचानकर्ता निर्धारित किया है। इशारे को हटाकर मेरे लिए काम किया।


मेरे पास दोनों हैं; इशारे पहचानने वाले और किया हालांकि, हमेशा जेस्चर पहचानकर्ता प्राथमिकता लेता है। दूसरे नंबर पर आने में असमर्थ। क्या दोनों को संभालने का एक तरीका है या मुझे जेस्चर पहचानकर्ता से छुटकारा पाना है? धन्यवाद!
रॉन

यह शीर्ष पर होना चाहिए :) आईओएस के विकास में 7 साल के बाद 1 घंटे का समय मुझे लगा।
क्लाउन

6

मैंने इस उत्तर को पोस्ट करने पर भी बहस की क्योंकि मुझे लगता है कि इसके लिए सितारों को खुद को प्रकट करने के लिए इस तरह के संरेखित करना चाहिए।

मैं इस समस्या का एक प्रकार है और अन्य समाधान की जाँच कर रहा हूँ। मेरे टेबल व्यू पर यह पहले टैप पर मेरी टेबल की अंतिम पंक्ति को प्रोसेस नहीं कर रहा है। यह इस पर प्रकाश डालता है, लेकिन didSelectRowAtIndexPathबुलाया नहीं जा रहा है। अन्य सभी पंक्तियाँ ठीक काम करती हैं। लेकिन अगर मैं टेबलव्यू उछाल को चालू करता हूं तो यह समस्या को हल करने के लिए लगता है (लेकिन फिर आपको टेबलव्यू उछाल से निपटना होगा)।


क्या आपको कारण पता चला कि ऐसा क्यों हो रहा है? मेरे साथ भी ठीक यही समस्या है। जब मैं टेबल बाउंसिंग बंद कर देता हूं, तो तालिका में पहली / आखिरी पंक्ति पहले नल पर प्रतिक्रिया नहीं करती है। मैंने सोचा कि यह बग है, लेकिन यह एक वर्ष से अधिक है और यह अभी भी हो रहा है।
filip.karas

नहीं, मैं सिर्फ टेबलव्यू उछाल पर मुड़ गया और उस पर छोड़ दिया।
चेस रॉबर्ट्स

मैं एक iPhone 5 (iOS 10.3) पर केवल इस मुद्दे पर चल रहा हूं - मेरे टेबलव्यू पर उछाल को मोड़कर इसे तय किया। बहुत अजीब!
ली प्रॉबर्ट

4

UITableViewCellSelectionStyleNone उस समस्या को प्रदर्शित करने वाले सेल के लिए सेट किया गया था (ios9)।

मैंने कॉल करना समाप्त कर दिया है

[tableView deselectRowAtIndexPath:indexPath animated:NO];

में पहली बात

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

जो समान नहीं है, लेकिन काफी अच्छा है। मुझे आश्चर्य होता है कि किस तरह का टेबल टूटना ios10 लाता है।


यह मेरे लिए काम करता है लेकिन मुझे इसकी शैली को बिना बनाए चयन को छिपाने के लिए वर्कअराउंड की आवश्यकता है। मैंने ओवरराइड किया था, setSelectedलेकिन जब उपयोगकर्ता सेल को पकड़ रहा है, तो चयन प्रकट होता है जो स्वीकार्य नहीं है
MMujtabaRoohani

1

स्विफ्ट 2

सुनिश्चित करें कि आपके पास यह सेट सही है:

self.tableView.allowsSelection = true

इसे अपने अधिकार viewDidLoad()से पहले और बाद में ऊपर रखेंsuper.viewDidLoad()


1

स्विफ्ट 3

यदि आप स्विफ्ट 3 के साथ एक ऐसी कक्षा में काम कर रहे हैं जो कि नहीं है UITableViewControllerऔर आप उपयोग कर रहे हैं UITableViewDelegate, तो आपको विधि शीर्षक का उपयोग करने की आवश्यकता हो सकती है:

@objc(tableView:didSelectRowAtIndexPath:) func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){...}

यह मेरे लिए काम करता है, हालाँकि मैंने अभी अपनी परियोजना स्विफ्ट 3 में माइग्रेट की है। यह काफी नई है इसलिए इसे बाद में ठीक किया जा सकता है।


1

यदि आपने अपनी कक्षा में कोई UITapGestureRecognizer निर्धारित किया है, तो आप इस लाइन को अपने doSelectRowAtIndexPath में जोड़ सकते हैं:

[tableView deselectRowAtIndexPath:indexPath animated:NO];

इसने मेरे लिए काम किया।


1

यह समस्या तब भी होती है जब आप जेस्चर व्यूवाइजर के साथ काम कर रहे होते हैं, इस मामले में आपको उन्हें हटाने की आवश्यकता नहीं होती है, आपको केवल यह सुनिश्चित करने की आवश्यकता होती है कि आपकी जेस्चर प्रॉपर्टी cancelsTouchesInView = falseयह एक बूलियन वैल्यू है जो प्रभावित करती है कि जब टच किसी व्यू पर दिया जाए एक इशारा पहचाना जाता है।


0

स्विफ्ट 3

मेरे मामले में किसी भी अन्य जवाब ने काम नहीं किया, मेरे लिए यह तय था:

tableView.delaysContentTouches = false


0

didSelectRowAtफ़ंक्शन को पहले या दूसरे टैप में मेरे ऐप में नहीं बुलाया गया था ... मैं हल करने की कोशिश कर रहा था समस्या का कोई समाधान नहीं मिल सका। लेकिन अचानक मुझे पहचाना गया, मैं view.animation रंग परिवर्तन का उपयोग कर रहा था ... Delegateएनीमेशन जारी रहने के दौरान विधि को नहीं बुलाया गया था


0

मेरे मामले में एक इशारा पहचानकर्ता के साथ मेरे पास यूआईटेबल व्यू सेक्शन था। जब शीर्ष लेख टैप किया जाता है, तो उसे उस खंड में कुछ पंक्तियाँ सम्मिलित करनी चाहिए और सम्मिलन को चेतन करना चाहिए (जैसे विस्तार / पतन अनुभाग)। पहली बार जब विस्तार किया गया और टैप किया गया, तो डिडाइरेक्टो प्रतिनिधि विधि को निकाल नहीं दिया गया। आगे के नल और विस्तार / ढहने की क्रियाओं के लिए, यह उम्मीद के मुताबिक काम कर रहा था।

@Ayoub नूरी I द्वारा प्रति उत्तर के अनुसार cancelsTouchesInView को गलत पर सेट किया गया और इससे समस्या हल हो गई। tapGestureRecognizer?। cancelsTouchesInView = false


0

स्विफ्ट 4.2

गुण निरीक्षक में "देरी टच डाउन" को अक्षम करने से समस्या हल हो गई।
उसके बाद क्लिक सुचारू हैं और तुरंत ही फायर करें।

XCode विशेषताएँ निरीक्षक


0

मेरे लिए जो काम किया वह टाइप करना शुरू किया "डिडसेलेक्ट ..." और फिर बाकी में स्वतः पूर्ण भरने दें। जाहिरा तौर पर मेरे सिंटैक्स के कुछ विवरण विस्की थे। जैसा कि दूसरों ने कहा है, आईडीई का उपयोग करें !!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.