2011-10-18 16 views
33

मेरे पास बहुत सारी डेटा है और मेरी तालिका में बहुत सारी पंक्तियां हैं। जब डेटा बदलता है मैं स्क्रीन पर अपनी दृश्यमान कोशिकाओं को अपडेट करना चाहता हूं, तो मैं वास्तव में पुनः लोडडेटा का उपयोग नहीं करना चाहता क्योंकि यह एक महंगी कॉल है।आईओएस - UITableView तालिका को ठीक से ताज़ा करें?

क्या किसी भी तरह से दृश्यमान कक्षों को अपडेट करना संभव है? मैंने कॉल करने की कोशिश की: beginUpdate & endUpdate तालिका पर, लेकिन यह हर समय काम नहीं करता है?

कोई सुझाव?

+0

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

+0

यदि आप सभी _visible_ कक्षों को रीफ्रेश करने जा रहे हैं तो पुनः लोड करें ** ** ** महंगा नहीं होना चाहिए। – Nevin

+0

@StevenFisher हाँ मेरे मामले में यह बहुत महंगा है, मेरे पास बहुत सारी गणना है, जैसे कि कोशिकाओं की आवश्यक ऊंचाई, और कुछ वेब कॉल। तो शायद मुझे यह कहना चाहिए था कि यह मेरे मामले के लिए महंगा है। – aryaxt

उत्तर

86

आप कर सकते हैं:

[tableView reloadRowsAtIndexPaths:[tableView indexPathsForVisibleRows] 
       withRowAnimation:UITableViewRowAnimationNone]; 
+0

बहुत अच्छा, धन्यवाद। यह एक आदर्श समाधान है जब विशेष रूप से एक सेल को पुनः लोड करने की बात आती है। – aryaxt

+0

क्या होता है यदि उपयोगकर्ता बाद में उस सेल पर स्क्रॉल करता है जो उस कॉल के दौरान दिखाई नहीं दे रहा था? मुझे लगता है कि वह तारीख की जानकारी से बाहर देखेगा? – dancl

+2

जो कक्ष दिखाई नहीं दे रहे हैं वे डेटा के साथ पॉप्युलेट नहीं हैं। तालिका दृश्य के डेटा स्रोत कॉलबैक के माध्यम से, वे स्क्रीन पर आने के बाद पॉप्युलेट हो जाते हैं। –

-1

बुला 'deleteRowsAtIndexPaths', UITableView की एक विधि है, है ना के बाद आप अपने डेटा स्रोत से मॉडल को हटा का प्रयास करें। उदाहरण के लिए, यदि आप संपादन मोड में एक पंक्ति को हटा रहे हैं, तो आप नीचे दिए गए कोड की तरह कुछ लिख सकते हैं। ध्यान दें कि में पहली पंक्ति 'अगर' बयान डेटा स्रोत से वस्तु निकाल देता है, और दूसरी पंक्ति तालिका को साफ:

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    if (editingStyle == UITableViewCellEditingStyleDelete) { 

     [[[[[ItemsStore sharedStore] parameterArray] objectAtIndex:indexPath.section] objectForKey:@"data"] removeObjectAtIndex:indexPath.row]; 

     [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 

    } 
} 
0

स्विफ्ट 3 के लिए:

tableView.reloadRows(at: tableView.indexPathsForVisibleRows!, with: .none) 
संबंधित मुद्दे