2009-12-14 21 views
5

संभव डुप्लिकेट:
Can you animate a height change on a UITableViewCell when selected?चयन पर चेतन UITableViewCell ऊंचाई

मैं ऐसा करने का सही तरीका यह पता लगाने की कोशिश करने के लिए Googling के एक बहुत कर रहा हूँ, और अब तक मैं नुकसान में हूँ।

मैंने अपने स्वयं के दृश्य के साथ UITableViewCell को उपclassed है और मैं इसे चुनने के लिए UITableViewCell की ऊंचाई को एनिमेट करने की कोशिश कर रहा हूं, और जब इसे फिर से चुना जाता है तो अनुबंध करने के लिए। इस तालिका में हजारों पंक्तियां रखने की क्षमता है, इसलिए मैं तालिका दृश्य की ऊंचाई को ओवरराइड नहीं करना चाहता हूं ForRowAtIndexPath। आदर्श रूप में मैं एक समय में एक से अधिक सेल का विस्तार करने में सक्षम होना चाहता हूं, लेकिन यह उतना महत्वपूर्ण नहीं है। इसे करने का बेहतरीन तरीका क्या है?

धन्यवाद, जस्टिन

उत्तर

6

वहाँ heightForRowAtIndexPath से सेल ऊंचाई निर्दिष्ट करने के लिए कोई अन्य तंत्र है। जब तक आप उस विधि में विस्तारित सेल के लिए उचित रूप से लेखांकन नहीं कर रहे हैं, तो आप अपने अन्य कोशिकाओं को या तो इसके ऊपर चल रहे हैं या इसके नीचे छिपे हुए हैं। बोनहेड कोड से जहां मैं ऊंचाई सेट अप करना भूल गया ForRowAtIndexPath, मुझे पूरा यकीन है कि आपकी अन्य कोशिकाएं इसके ऊपर प्रदर्शित होंगी।

चूंकि आप हजारों पंक्तियों की बात कर रहे हैं, हम मान लेंगे कि उपयोगकर्ता कोशिकाओं को पुनर्व्यवस्थित नहीं कर सकता है।

उपयोगकर्ता द्वारा दिए गए सेल को टैप करते समय विस्तारित सेल के इंडेक्स पथ को स्टोर किया जा सकता है। फिर, heightForRowAtIndexPath इस प्रकार दिखाई देंगे:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath 
{ 

if ([indexPath isEqual:lastSelectedIndexPath]) 
{ 
    return 80; 
} 

else { 
    return 44; 
} 

} 

तुम सच में एकाधिक चयन चाहते हैं, आप एक सरणी के लिए उपयुक्त सूचकांक रास्तों की दुकान और इस तरह उनके लिए जांच कर सकता है:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath 
{ 

CGFloat cellHeight = 44; 

for (NSIndexPath *expandedIndexPath in expandedIndexPathsArray) 
{ 
    if ([indexPath compare:expandedIndexPath] == NSOrderedSame) 
    { 
     cellHeight = 80; 
     break; 
    } 
} 

return cellHeight; 

} 

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

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPathswithRowAnimation:(UITableViewRowAnimation)animation 

इस के लिए ब्याज की हो सकता है के रूप में आप सेल एनिमेशन का उपयोग करने के लिए नीचे दिए गए कोशिकाओं के आंदोलन अनुकरण करने के लिए अपने विस्तार समायोजित करने में सक्षम हो सकता है।

यदि आप सेल के फ्रेम को पूरी तरह से एनिमेट कर सकते हैं, तो आप नई ऊंचाई सेट होने के बाद विस्तारित डेटा की अस्पष्टता एनीमेशन कर सकते हैं।

यह एक कठिन है लेकिन यदि आप इसे काम करते हैं तो मुझे लगता है कि यह बहुत अच्छा होगा। सौभाग्य।

+1

धन्यवाद दानिलो, आपने मुझे सही रास्ते पर शुरू किया। मैंने reloadRowAtIndexPaths को reSelectRowAtIndexPath के भीतर उपयोग करके काम करना समाप्त कर दिया। मैं यह देखने के लिए जांच करता हूं कि सेल का विस्तार किया गया है और ऊंचाई के समान ऊंचाई को सेट किया गया है जैसा कि आपने बताया है। एक बार फिर धन्यवाद! – Justin

+1

बहुत अच्छा! आपको एक सहायक झुकाव देने के लिए खुशी हुई। उम्मीद है कि यह काम करता है। हो सकता है कि मैं अंततः इसे इन दिनों में से एक कोशिश कर दूंगा। –

+1

'[इंडेक्सपाथ तुलना: विस्तारित इंडेक्सपैथ] == NSOrderedSame' को लिखा जाना चाहिए '[indexPath isEqual: expandedIndexPath]' – user102008

संबंधित मुद्दे