पंक्तियों नामक तारों के एनएसएमयूटेबलएरे का उपयोग करने के एक साधारण उदाहरण के लिए, तालिका तालिका को स्थानांतरित करने के लिए मुझे अपने टेबल नियंत्रक में क्या लागू करना होगा और मेरे सरणी में परिवर्तनों को प्रतिबिंबित करना होगा?UITableView पंक्तियों को पुन: व्यवस्थित करने के लिए मुझे किन तरीकों को लागू करना है?
उत्तर
यहां हम अपने भारी भारोत्तोलन करते हैं।
- (void)tableView:(UITableView *)tableView
moveRowAtIndexPath:(NSIndexPath *)fromIndexPath
toIndexPath:(NSIndexPath *)toIndexPath
{
NSLog(@"move from:%d to:%d", fromIndexPath.row, toIndexPath.row);
// fetch the object at the row being moved
NSString *r = [rows objectAtIndex:fromIndexPath.row];
// remove the original from the data structure
[rows removeObjectAtIndex:fromIndexPath.row];
// insert the object at the target row
[rows insertObject:r atIndex:toIndexPath.row];
NSLog(@"result of move :\n%@", [self rows]);
}
चूंकि यह एक मूल उदाहरण है, इसलिए सभी पंक्तियों को स्थानांतरित करने दें।
- (BOOL)tableView:(UITableView *)tableView
canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
}
NSMutableArray
एक विधि exchangeObjectAtIndex:withObjectAtIndex:
कहा जाता है।
मैंने इसे आजमाया है, लेकिन व्यवहार अलग है।तालिका पंक्तियों का आदान-प्रदान नहीं करती है, यह एक पंक्ति को हटा देती है, फिर इसे एक अलग स्थान पर डालती है। यदि मैं इस विधि का उपयोग करता हूं, तो तालिका और बैकिंग स्टोर प्रत्येक चाल के साथ समन्वयित हो जाता है। –
उपर्युक्त में से कोई भी काम नहीं करेगा। मूल पोस्ट कोड में, तालिकादृश्य क्रैश हो जाएगा क्योंकि यह उस डेटा को हटा देता है जो अभी भी उपयोग में लाएगा, और इसके बाद भी इसे ठीक किया गया था, तालिका के 'पुनर्व्यवस्थित' के तरीके के कारण सरणी में सही डेटा नहीं होगा।
exchangeObjectAtIndex: withObjectAtIndex: कैसे एक tableview
क्यों उलटफेर का अपना लागू करता है के अनुसार एक सरणी उलटफेर लिए काम नहीं करेगा? क्योंकि जब उपयोगकर्ता इसे पुनर्व्यवस्थित करने के लिए तालिका कक्ष का चयन करता है, तो वह सेल उस सेल के साथ स्वैप नहीं होता है जिसे वे इसे ले जा रहे हैं। वे जिस सेल को चुनते हैं वह नई पंक्ति अनुक्रमणिका में डाला जाता है और फिर मूल सेल हटा दिया जाता है। कम से कम यह उपयोगकर्ता के लिए ऐसा लगता है।
समाधान: तालिकादृश्य एक पुनर्व्यवस्थित लागू करने के तरीके के कारण, हमें यह सुनिश्चित करने के लिए एक जांच करने की आवश्यकता है कि हम सही पंक्ति को जोड़ और हटा दें। यह कोड मैंने एक साथ रखा है सरल है और मेरे लिए सही काम करता है।
एक उदाहरण के रूप मूल पोस्ट कोड डेटा का उपयोग करना:
- (void)tableView:(UITableView *)tableView
moveRowAtIndexPath:(NSIndexPath *)fromIndexPath
toIndexPath:(NSIndexPath *)toIndexPath
{
NSLog(@"move from:%d to:%d", fromIndexPath.row, toIndexPath.row);
// fetch the object at the row being moved
NSString *r = [rows objectAtIndex:fromIndexPath.row];
// checks to make sure we add and remove the right rows
if (fromIndexPath.row > toIndexPath.row) {
// insert the object at the target row
[rows insertObject:r atIndex:toIndexPath.row];
// remove the original from the data structure
[rows removeObjectAtIndex:(fromIndexPath.row + 1)];
}
else if (fromIndexPath.row < toIndexPath.row) {
// insert the object at the target row
[rows insertObject:r atIndex:(toIndexPath.row + 1)];
// remove the original from the data structure
[rows removeObjectAtIndex:(fromIndexPath.row)];
}
}
आप कुछ ही क्षणों लेने के लिए और क्या एक पुनर्व्यवस्थित दौरान एक tableview के लिए होता पर एक नज़र डालें तो आप समझ जायेंगे कि हम क्यों जोड़ने 1 की जहां हम किया।
मैं एक्सकोड के लिए काफी नया हूं, इसलिए मुझे पता है कि ऐसा करने का शायद एक आसान तरीका है, या कोड शायद सरलीकृत हो सकता है .... बस यह जानने में मदद कर रहा हूं कि मैं कहां कर सकता हूं क्योंकि यह मुझे कुछ ले गया है इसे समझने के लिए घंटे। उम्मीद है कि यह किसी को कुछ समय बचाता है!
NSObject *tempObj = [[self.rows objectAtIndex:fromIndexPath.row] retain];
[self.rows removeObjectAtIndex:fromIndexPath.row];
[self.rows insertObject:tempObj atIndex:toIndexPath.row];
[tempObj release];
एप्पल के प्रलेखन, और मेरे अपने अनुभव के अनुसार, इस के लिए कुछ सरल कोड है कि बहुत अच्छी तरह से काम करता है मेरे लिए सबसे अच्छा, ऐप्पल तरीका, बस एआरसी का उपयोग करते समय बनाए रखने और रिलीज को हटाने के लिए याद रखें। तो, एक संक्षिप्त संक्षिप्त समाधान
NSObject *tempObj = [self.rows objectAtIndex:fromIndexPath.row];
[self.rows removeObjectAtIndex:fromIndexPath.row];
[self.rows insertObject:tempObj atIndex:toIndexPath.row];
अच्छा जवाब। आप सभी का सबसे सही है। धन्यवाद दोस्त! – GeneCode
मिले एक सरल कार्यान्वयन के खिलाफ मेरे सिर तोड़ने के बाद इस चर्चा ... माइकल Berding समाधान है:
- 1. डब्ल्यूपीएफ डाटाग्रिड: पंक्तियों को पुन: व्यवस्थित करना?
- 2. UITableView को पुन: व्यवस्थित करने के लिए कैसे करें?
- 3. पुन: व्यवस्थित करें UITableView और छिपाने पुन: व्यवस्थित करें नियंत्रण
- 4. MySQL: कैसे "को पुन: व्यवस्थित करने के लिए" एक मेज
- 5. पंक्तियों को पुन: व्यवस्थित किए बिना WPF मल्टी-लाइन टैबकंट्रोल
- 6. रनटाइम पर सार तरीकों को लागू करना?
- 7. क्या मुझे जुनीट में पुन: उपयोग करने के तरीकों को विभाजित करना चाहिए?
- 8. ग्राफिक्स को नोड्स को पुन: व्यवस्थित करने से रोकना
- 9. पंक्तियों को फिर से व्यवस्थित या हटाए जाने पर वैकल्पिक रंगीन UITableViewCells को अपडेट करना
- 10. ईएलएफ फ़ाइल अनुभागों को पुन: व्यवस्थित करने का सरल तरीका
- 11. UITableView UIScrollView के प्रतिनिधि तरीकों को क्यों कॉल करता है?
- 12. स्थितित्मक वस्तुओं की एक सूची को पुन: व्यवस्थित करना
- 13. UITableView पंक्तियों को स्थानांतरित करने का प्रयास करते समय क्रैशिंग
- 14. लोगों के समूहों को व्यवस्थित रूप से व्यवस्थित करना
- 15. एक्सटेंशन विधियों को व्यवस्थित करना
- 16. कक्षाओं को व्यवस्थित करने के लिए, पैकेज
- 17. कुछ स्लिमग्रिड कॉलम को पुन: व्यवस्थित करने से रोकें
- 18. पुन: व्यवस्थित करें कतार
- 19. मुझे UITableView
- 20. उपयोगकर्ता इंटरफ़ेस में छवियों को पुन: व्यवस्थित करने के लिए सुझावों की तलाश
- 21. मुझे अपने मास्टर डीडीएल स्क्रिप्ट को व्यवस्थित करना चाहिए
- 22. कैसे UITableView पंक्तियों के बीच
- 23. मुझे अपने फ्लेक्स एप्लिकेशन को व्यवस्थित कैसे करना चाहिए?
- 24. एचटीएमएल सूचियों को पुन: व्यवस्थित करने के लिए खींचें और छोड़ें
- 25. मुझे अपनी एक्सकोड परियोजना फ़ाइलों को कैसे व्यवस्थित करना चाहिए?
- 26. मेरे संवाद के नीले हाइलाइट रंग को बदलने के लिए मुझे किन थीम विशेषताओं को ओवरराइड करने की आवश्यकता है?
- 27. मिनीडिंप के साथ मुझे किन सेटिंग्स का उपयोग करना चाहिए?
- 28. jqGrid ड्रैग और ड्रॉप स्तंभ को पुन: व्यवस्थित jqGrid के
- 29. सी # डब्ल्यूपीएफ ड्रैग सूची को पुन: व्यवस्थित करने के लिए खींचें
- 30. को लागू करने वर्ग
जब निकालें ऑब्जेक्टएटइंडेक्स कहा जाता है, तो क्या उस ऑब्जेक्ट की संदर्भ गणना को कम कर देगा (और शायद इसे हटाया जा सकता है)? मुझे लगता है ExchangeObjectAtIndex: withObjectAtIndex: (जैसा कि @dreamlax द्वारा सुझाया गया है) सुरक्षित है। –
बीटीडब्ल्यू, यदि आप अपने स्वयं के प्रश्न का उत्तर दे रहे हैं, तो मुझे लगता है कि यह विकी बनाने के लिए एक अच्छा रूप है। –
@ क्रिस्टोफर जोहानसन 'एक्सचेंजऑब्जेक्टएट इंडेक्स: withObjectAtIndex: 'इस मामले में उपयुक्त नहीं है। इसमें 'tableView: moveRowAtIndexPath: toIndexPath:' द्वारा आवश्यक लोगों से अलग अर्थशास्त्र हैं। – Benjohn