2015-04-14 8 views
14

के साथ टेबल व्यू सेल को फिर से लोड करें क्या एनीमेशन के साथ कई सेक्शन वाले विशिष्ट UITableView कोशिकाओं को फिर से लोड करने का कोई तरीका है?एनीमेशन (स्विफ्ट)

मैं उपयोग कर रहे हैं:

self.TheTableView.reloadSections(NSIndexSet(index: 1), withRowAnimation: UITableViewRowAnimation.Right) 

इस अनुभाग में सभी कक्षों एनिमेट हालांकि।

self.TheTableView.reloadRowsAtIndexPaths(<#indexPaths: [AnyObject]#>, 
             withRowAnimation: <#UITableViewRowAnimation#>) 

संपादित करें:: 'अमान्य अद्यतन: खंड 1 में पंक्तियों की अमान्य संख्या

न आया हुआ अपवाद' NSInternalInconsistencyException ', कारण की वजह से reloadRowsAtIndexPaths

समाप्त एप्लिकेशन का उपयोग करने के बाद अन्य विकल्प का उपयोग करने के लिए है अद्यतन (5) के बाद किसी मौजूदा खंड में निहित पंक्तियों की संख्या अद्यतन (4) से पहले उस खंड में निहित पंक्तियों की संख्या के बराबर होनी चाहिए, साथ ही उस खंड से डाली गई पंक्तियों की संख्या या घटाएं डाला गया, 0 हटा दिया गया) और प्लस या घटाएं पंक्तियों की संख्या उस खंड में या बाहर चली गई (0 एमओ ved में, 0 बाहर चले गए)। '

किसी सरणी में ऑब्जेक्ट्स को जोड़कर टेबलव्यू को पुनः लोड करने का एक आसान तरीका खोजने का प्रयास करना।

ReloadRowsAtIndexPaths काम करने से पहले TheTableView.reloadData() को कॉल करना, लेकिन एनीमेशन गड़बड़ है। क्या कोई और दृष्टिकोण है?

+0

में [] कुछ इंट मूल्यों डाल !? – user1019042

+0

शायद आपको इस पोस्ट पर एक नज़र रखना चाहिए http://stackoverflow.com/questions/20987585/ios-inserting-multiple-rows-in-uitableview-with-insertrowsatindexpaths –

उत्तर

10

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

var indexPath1 = NSIndexPath(forRow: 1, inSection: 1) 
var indexPath2 = NSIndexPath(forRow: 1, inSection: 2) 
self.tableView.reloadRowsAtIndexPaths([indexPath1, indexPath2], withRowAnimation: UITableViewRowAnimation.Automatic) 

आपकी टिप्पणी के आधार पर आप अपनी सरणी बदलना चाहते हैं और तालिका में बदलावों को एनिमेट करना चाहते हैं। यदि ऐसा है तो आपको UITableViews या यहां तक ​​कि NSFetchedResultsController के लिए startUpdates() और endUpdates() का उपयोग करना चाहिए, इसलिए यह सभी अद्यतन एनिमेशन को साफ़ रूप से संभालता है।

self.tableView.beginUpdates() 
// Insert or delete rows 
self.tableView.endUpdates() 

मैं अगर आप कोर डाटा उपयोग कर रहे हैं के रूप में यह इस पूरे प्रक्रिया को सरल NSFetchedResultsController का उपयोग कर सलाह देते हैं। अन्यथा आपको स्वयं परिवर्तनों को संभालना होगा। दूसरे शब्दों में, यदि आपकी सरणी बदलती है तो आपको startUpdates() और endUpdates() का उपयोग करके तालिकादृश्य में मैन्युअल रूप से पंक्तियों को हटाने या डालने की आवश्यकता होती है। यदि आप कोर डेटा का उपयोग नहीं कर रहे हैं, तो यह समझने के लिए this का अध्ययन करें कि यह सब कैसे संभाला जाता है।

+0

बिना अपवाद अपवाद के कारण ऐप को समाप्त करना 'एनएसआईएननल इंटरकेंसिस्टेंसी अपवाद', कारण: 'अमान्य अद्यतन: खंड 1 में पंक्तियों की अमान्य संख्या अद्यतन (5) के बाद किसी मौजूदा खंड में निहित पंक्तियों की संख्या अद्यतन (4), प्लस या घटा से पहले उस खंड में निहित पंक्तियों की संख्या के बराबर होनी चाहिए उस खंड से डाली गई पंक्तियों की संख्या (0 डाला गया, 0 हटाया गया) और प्लस या घटाएं पंक्तियों की संख्या उस अनुभाग में या बाहर ले जाया गया है (0 स्थानांतरित हो गया है, 0 स्थानांतरित हो गया है)। ' –

+0

यह काम कर सकता है, लेकिन मुझे reloadRowsAtIndexPaths कॉल करने से पहले डेटा को फिर से लोड करना होगा। मैं इसके साथ थोड़ा सा झुकाव जा रहा हूँ। हो सकता है कि उस आदेश से ठीक पहले ReloadData को कॉल करें? –

+0

यदि आप एक स्वच्छ एनीमेशन चाहते हैं तो आप पुनः लोडडेटा को कॉल नहीं कर सकते हैं। अगर आपका डेटा बदल रहा है तो BeginUpdates() और endUpdates() में देखें। UITableViewControllers चीजों को अधिक आसान बनाने के लिए इसका उपयोग करते हैं (यदि यह आपके ऐप मॉडल फिट बैठता है) –

4

में स्विफ्ट 3.0

हम tableview

let indexPath = IndexPath(item: 2, section: 0) 
self.tableView.reloadRows(at: [indexPath], with: .automatic) 
2

में विशेष खंड के विशेष पंक्ति को फिर से लोड कर सकते हैं तेजी से 3.0 में एकल खंड आप ऐसा कर सकते हैं फिर से लोड करना चाहते हैं:

tableView.reloadSections(IndexSet(integer: 0), with: .automatic) 
2

आधिकारिक दस्तावेज़ में इंडेक्ससेट परिभाषित करें:

पूर्णांक मानों के Set प्रबंधित करता है, जो आमतौर पर कोको एपीआई में इंडेक्स प्रकार के रूप में उपयोग किया जाता है। मान्य पूर्णांक मानों की श्रेणी (0, INT_MAX-1) में है। इस सीमा के बाहर कुछ भी एक त्रुटि है।

तो IndexSet, सूचकांक के बारे में सेट है बस क्या हो रहा समाप्त हो गया

// for reload one section 
tableView.reloadSections([section], with: .automatic) 
// or using like this 
tableView.reloadSections(IndexSet(integer: section), with: .automatic) 

// for reload multi sections 
tableView.reloadSections([1, 2, 3, section], with: .automatic) 
+1

कृपया और विवरण जोड़ें और/या आपके उत्तर के बारे में जानकारी और यह पूछे जाने वाले समस्या को कैसे हल करता है ताकि अन्य स्पष्टीकरण – koceeng

+0

हाय @koceeng पूछे बिना इसे आसानी से समझ सकें, मैं स्विफ्ट में नया हूं। जहां तक ​​मुझे पता है, इंडेक्ससेट इंडेक्स के बारे में एक सेट है, और इंडेक्ससेट को परिभाषित करते समय आधिकारिक दस्तावेज इसे समझाता है: /// पूर्णांक मानों का 'सेट' प्रबंधित करता है, जो आमतौर पर कोको एपीआई में इंडेक्स प्रकार के रूप में उपयोग किया जाता है। /// वैध पूर्णांक मानों की सीमा 0 है ..

+0

मुझे गलत मत समझो। आपका उत्तर यहां स्वागत से अधिक है, हम वास्तव में इसकी सराहना करते हैं। लेकिन अगर आप कुछ विवरण/विवरण प्रदान करते हैं तो यह समझना अधिक दिलचस्प और आसान होगा। असल में, ऊपर दी गई आपकी टिप्पणी वास्तव में आपके उत्तर के अंदर उल्लिखित है, आप देखते हैं। क्योंकि कई बार, जो उत्तर की तलाश में है वह टिप्पणी को अनदेखा करता है। आप अपना उत्तर संपादित कर सकते हैं और ऊपर अपनी टिप्पणी शामिल कर सकते हैं। शुभ दिन :) – koceeng