2011-03-24 14 views
62

मैं केवल एक सेल/पंक्ति को फिर से लोड और एनिमेट कैसे कर सकता हूं? अभी मैं कुछ फाइलें डाउनलोड करता हूं। प्रत्येक बार जब फ़ाइल डाउनलोड हो जाती है, तो मैं इसे समाप्त प्रतिनिधि को कॉल करता हूं और [टेबलव्यू रीलोड] कॉल करता हूं। लेकिन फिर पूरी तालिका पुनः लोड हो जाती है। और मैं तालिका को कैसे एनिमेट कर सकता हूं, ताकि यह झपकी न दे। उदाहरण के लिए एक फीका प्रभाव या ऐसा।केवल एक UITableView सेल/पंक्ति को फिर से लोड और एनिमेट कैसे करें?

मैक्स

उत्तर

176

स्वागत करती निम्नलिखित UITableView उदाहरण विधि का उपयोग करें:

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation 

आप NSIndexPaths है कि आप फिर से लोड करना चाहते हैं की एक NSArray निर्दिष्ट करना होगा। अगर आप बस पुनः लोड करना चाहते हैं। यदि आप केवल एक सेल को फिर से लोड करना चाहते हैं, तो आप NSArray की आपूर्ति कर सकते हैं जिसमें केवल एक NSIndexPath है। उदाहरण के लिए:

NSIndexPath* rowToReload = [NSIndexPath indexPathForRow:3 inSection:0]; 
NSArray* rowsToReload = [NSArray arrayWithObjects:rowToReload, nil]; 
[myUITableView reloadRowsAtIndexPaths:rowsToReload withRowAnimation:UITableViewRowAnimationNone]; 

आप पंक्ति ताज़ा एनिमेट की हर संभव तरीके के लिए UITableViewRowAnimation enum देख सकते हैं। यदि आप कोई एनीमेशन नहीं चाहते हैं तो आप उदाहरण के रूप में UITableViewRowAnimationNone मान का उपयोग कर सकते हैं।

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

+1

धन्यवाद! वह वास्तव में मेरी मदद करता है! – madmax

+0

कोई समस्या नहीं! मैं खुशी से मदद कर सकता है। :) –

+16

नए वाक्यविन्यास के साथ आप निम्न कार्य भी कर सकते हैं: [UITableView reloadRowsAtIndexPaths: @ [indexPath] withRowAnimation: UITableViewRowAnimationNone]; – bbrame

2

आप केवल tableview सेल में टेक्स्ट को अपडेट करने की जरूरत है ..

UITableViewCell *cell = [_myTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]]; 

cell.textLabel.text = [NSString stringWithFormat:@"%i", (int)_targetMaxDistanceSlider.value]; 
+0

धन्यवाद इसने आरटीटी कार्यान्वयन में मदद की जिसे पूरे दृश्य को पुनः लोड करने की आवश्यकता नहीं थी, लेकिन केवल पाठ। –

0

Apple Document नई वाक्य रचना के साथ यह किया

[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone]; 
0

indexPaths दिया पर एक tableView में विशेष कोशिकाओं को फिर से लोड करने के लिए, आपको सरणी indexPaths बनाने की आवश्यकता है और फिरपर reloadRowsAtIndexPaths पर फ़ंक्शन कॉल करें।

स्विफ्ट::

यहाँ उदाहरण है

let indexPathsToReload = [indexPath1, indexPath2, indexPath3] 
tableView.reloadRowsAtIndexPaths(indexPathsToReload, withRowAnimation: .None) 

उद्देश्य सी:

NSArray *indexPaths = @[indexPath1, indexPath2, indexPath3]; 
[self.tableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone]; 

या

NSArray *indexPaths = [NSArray arraywithobject:@"indexPath1", @"indexPath2", @"indexPath3",nil]; 
[self.tableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone]; 
संबंधित मुद्दे