2010-03-30 23 views
17

क्या कोई मुझे बता सकता है कि मैं सेल इंडेक्सपाथ कैसे प्राप्त कर सकता हूं? मैं तालिका में इंडेक्सपैथ को सहेज रहा था दृश्य: cellForRowAtIndexPath: विधि लेकिन यह केवल तभी लोड होता है जब सेल देखा जाता है और मुझे viewDidLoad विधि पर इसके अनुक्रमणिका पथ को जानने की आवश्यकता होती है। इसके परिणामस्वरूप शून्य मान आया क्योंकि जैसा कि मैंने कहा था कि सेल को एक बार देखा जाने के बाद ही इसका मूल्य लोड हो जाता है।UITableView सेल इंडेक्सपाथ

धन्यवाद।

संपादित

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

+1

तुम क्यों viewDidLoad विधि में indexPath की ज़रूरत है? –

+0

क्योंकि मुझे अपनी मेज पर एक विशिष्ट सेल स्थिति पर कूदने की आवश्यकता है, मुझे नहीं पता कि यह किस स्थिति में होगा। –

+0

मैं उलझन में हूँ।तालिका में एक विशिष्ट डेटा तत्व के लिए खंड और पंक्ति गणना कैसे रैखिक नहीं है? यदि यह रैखिक नहीं है, तो रैखिक तालिका कैसे प्रदर्शित होती है? – Giao

उत्तर

18

तालिका दृश्य पर indexPathForCell: विधि का उपयोग करें, UITableViewCell पर पॉइंटर दिया गया है, यह इसके सूचकांक को वापस देता है।

में scrollToRowAtIndexPath:atScrollPosition:animated: को viewDidLoad में सेट अप नहीं किया गया है, तो आप scrollToRowAtIndexPath:atScrollPosition:animated: डाल सकते हैं। वैसे भी यह एक बेहतर जगह है यदि दृश्य लोड होने के बाद एक से अधिक बार प्रकट हो सकता है, जैसे कि जब एक मोडल व्यू कंट्रोलर इस्तीफा देता है।

+1

समस्या यह है कि सेल पुन: प्रयोज्य है और यह तालिका दृश्य से पहले दिखाई या इंस्टेंट नहीं किया गया है: cellForRowAtIndexPath: कहा जाता है इसलिए मेरे पास सेल का कोई संदर्भ नहीं है। चूंकि मैं सेक्शन 5 से पंक्ति संख्या 0 पर कॉल कर रहा हूं, इसलिए मैं इंडेक्सपैथ बना रहा हूं और इसे स्क्रॉलटॉरोएट इंडेक्सपैथ में उपयोग कर रहा हूं: atScrollPosition: एनिमेटेड: मैं इस बदसूरत समाधान से फंस गया हूं, इसलिए यदि आपके पास बेहतर विचार है तो कृपया इसे साझा करें। –

+1

ठीक है, अगर आपको नहीं पता कि आप किस सेल को स्क्रॉल करना चाहते हैं, और यह नहीं जानते कि आप किस इंडेक्स पथ (पंक्ति/अनुभाग) को स्क्रॉल करना चाहते हैं, ऐसा लगता है कि आप इसे नहीं कर सकते हैं। यह लागू नहीं हो सकता है, लेकिन मेरे मामले में मेरे पास एनएसएआरएआरई में सभी कोशिकाएं हैं, इसलिए मैं किसी भी सेल पर स्क्रॉल कर सकता हूं, लेकिन फिर मैं किसी भी का पुन: उपयोग नहीं कर रहा हूं। – progrmr

+0

आपके सभी धैर्य के लिए धन्यवाद –

2

UITableViewCell में NSIndexPath संपत्ति नहीं है। UITableViewDataSource प्रतिनिधि उन विधियों को परिभाषित करता है जो दिए गए NSIndexPath के लिए सेल मांगते हैं, लेकिन इसका मतलब यह नहीं है कि सेल का NSIndexPath संपत्ति का कोई स्थायी संबंध है।

शायद यह आपकी मदद करेगा यदि आप इस संपत्ति के बारे में अधिक जानकारी देते हैं? viewDidLoad में सेल के स्थान के साथ आप क्या करना चाहते हैं?

+0

मैं scrollToRowAtIndexPath के साथ उस विशिष्ट सेल पर कूदने में सक्षम होना चाहता हूं: atScrollPosition: एनिमेटेड: ऐसा करने का सही तरीका प्रतीत होता है। –

+0

ठीक है, फिर एक 'NSIndexPath' चर बनाएँ, और अपने उपयोग के लिए एक प्रति बनाएं ताकि आप भविष्य में उस विधि को कॉल कर सकें। – pkananen

+0

मेरे पास जो कुछ है। समस्या यह है कि चर केवल तभी स्थापित होता है जब सेल का निर्माण होता है और यदि सेल शुरुआत में दिखाई नहीं दे रहा है, तो यह निर्माण नहीं किया गया है और यह मान शून्य है –

0

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

संपादित करें: ठीक है मुझे लगता है कि मैं देखता हूं कि आप क्या चाहते हैं: आप इंडेक्स को सहेज रहे हैं जब आप सेल को टेबल पर रखते हैं तो देखें। नोट: यदि आप ऐसा नहीं करते हैं, तो कोई तरीका नहीं है कि आप वास्तव में जान सकते हैं कि कौन सा इंडेक्सपैथ एक विशेष सेल रखा गया है, कम से कम नहीं, अगर आप चीजों को वैसे ही कर रहे हैं जो आपको करना चाहिए।

तो आप क्या कर सकते हैं बस अपने दृश्य में सभी कक्षों को डिज़ाइन करें, उन्हें एक सरणी में स्टोर करें, और फिर, जब तालिका दृश्य उनके लिए पूछता है, तो बस उन्हें उस सरणी से हटा दें।

ध्यान दें कि यह तालिका दृश्य को पॉप्युलेट करने का एक अच्छा तरीका नहीं है, क्योंकि यह कोशिकाओं को पुन: उपयोग करने से रोकता है। सरणी में कोशिकाओं (सादे UIViews) के सामग्री को सहेजने का एक बेहतर तरीका होगा, और सेल को वापस करने से पहले उन्हें सेल के सामग्री दृश्य में बच्चों के रूप में जोड़ें। यह सेल-पुन: उपयोग की अनुमति देगा, जो अच्छे प्रदर्शन के लिए महत्वपूर्ण है। यदि आपके पास स्क्रीन पर फिट बैठने की तुलना में अधिक सेल्स नहीं हैं, तो आपको फिर से उनका उपयोग करने की चिंता करने की आवश्यकता नहीं है।

+0

आपके उत्तर का हिस्सा सच नहीं है। एक विशिष्ट सेल के इंडेक्सपैथ को संग्रहीत करने के बाद बाद में मैं अभी भी इसके इंडेक्सपाथ का उपयोग कर सकता हूं क्योंकि इसे किसी अन्य स्थान पर संदर्भित किया गया है। –

+0

@Reonarudo: संपादन देखें। – Felixyz

+0

ठीक है, हो सकता है कि आप जो हो रहा है उससे परिचित न हों। जब मैं एक सेल इंडेक्सपैथ स्टोर करता हूं तो यह हमेशा वही मान होगा, भले ही सेल इंस्टॉल किया गया हो या नहीं। इसकी गणना प्रति अनुभाग पंक्तियों की संख्या और ई तालिका अनुभाग द्वारा मुझे दी गई संख्या ओएस अनुभागों के साथ की जाती है: सेलफोररोएट इंडेक्सपैथ: और जब मुझे विशिष्ट कोशिकाएं मिलती हैं तो मैं केवल अपनी स्थिति को स्टोर करता हूं, मेरे पास सभी को संग्रहित करने का कोई इरादा नहीं है कोशिकाएं क्योंकि वे कई लोगों के लिए रास्ता हैं। शायद सबसे अच्छा तरीका सभी आईपी को सहेजने के लिए नीचे स्क्रॉल होगा, फिर सब कुछ देखें डीडलोड? तुम क्या सोचते हो। धन्यवाद। –

1

यह एक प्रयास करें ..

NSSet *touches = [event allTouches]; 
UITouch *touch = [touches anyObject]; 
CGPoint currentTouchPosition = [touch locationInView:EventlistTable_obj]; 
NSIndexPath *indexPath = [EventlistTable_obj indexPathForRowAtPoint: currentTouchPosition]; 
NSLog(@"Selected row:%d in section:%d",indexPath.row,indexPath.section); 

इस तरह फोन है:

[cell.fourth_image_button addTarget:self action:@selector(Btn_pressed:event:) forControlEvents:UIControlEventTouchUpInside]; 
संबंधित मुद्दे