2013-01-16 10 views
5

मेरे ऐप में मुझे views मिल गया है जो editable में जगह होने की आवश्यकता है। मुझे tableviewcells सेटअप मिला है जिसमें UITextField शामिल है जो सक्षम है, और टेक्स्ट बदला जा सकता है और यह ठीक है, यह काम करता है।तालिका तालिका में टेक्स्ट फ़ील्ड को संपादित करने के लिए सबसे अच्छा तरीका सेल

मेरा प्रश्न यह है कि इन्हें ट्रैक रखने का सबसे अच्छा तरीका क्या है? मुझे चाहिए:

  • प्रत्येक textfield का आईवर रखें। यदि ऐसा है तो
    • मैं कैसे सुनिश्चित कर सकता हूं कि प्रत्येक cell में सही फ़ील्ड है यदि यह केवल एक बार तत्काल हो?
  • एक textfield जोड़ा जब cell बनाई गई है और केवल जब cell को विन्यस्त अपने मूल्य निर्धारित किया है। यदि ऐसा है तो
    • मैं मूल्यों का ट्रैक कैसे रखूं? यदि cellview से बाहर चला गया और फिर वापस, तो इसके मान अपने मूल मान पर रीसेट हो जाएंगे, न कि संपादित मूल्य।

क्या दृष्टिकोण आप आम तौर पर इस स्थिति के लिए उपयोग करने के लिए करते हैं? विशेष रूप से यदि cells की बड़ी संख्या है जिसके साथ आप काम कर रहे हैं।

+0

यह http://programmers.stackexchange.com/ – iDev

+0

में एक बेहतर सवाल रहा होगा मेरा बुरा, क्षमा करें। अगली बार करेंगे :) – PaReeOhNos

उत्तर

2

एमवीसी का पालन करने और अपने मॉडल को लागू करने का सबसे अच्छा तरीका है, जो आपके मामले में टेक्स्टफील्ड मान है। आप जो करते हैं वह उन मानों को एक सरणी में संग्रहीत करता है, और आपके सेल में ForIndexPath विधि में आप सरणी में सही मान का संदर्भ देते हैं। उदाहरण के लिए, तालिका की पहली पंक्ति (indexPath.row == 0) सरणी में पहला तत्व पुनर्प्राप्त करेगी। टेक्स्ट फ़ील्ड में परिवर्तन सरणी में संबंधित तत्व पर दर्ज किया जाएगा।

+0

मुझे कैसे पता चलेगा कि सरणी का कौन सा तत्व अपडेट करना है? क्या यह सिर्फ सूचकांक पथ या वर्तमान सेल पर आधारित होगा? तो पंक्ति 5 सरणी अनुक्रमणिका 5 (कोई वर्ग मानते हुए) को मैप कर सकता है – PaReeOhNos

+0

इंडेक्स पथ ऐसा करने का सबसे अच्छा तरीका है। – sosborn

2
  • सबक्लास UITableViewCell और इसके init विधि में UITextField जोड़ें।

  • कस्टम सेल क्लास के लिए प्रोटोकॉल बनाएं। जब UITextField प्रतिनिधि को संपादित करने या समाप्त करने के लिए प्रतिनिधि की विधि को कॉल करना शुरू करता है।

  • नियंत्रक में, कस्टम सेल के प्रोटोकॉल को लागू करने और tableView में सेल के टैग के लिए indexpath पंक्ति मान सेट: cellForRowAtIndexPath:

तो हर बार जब आप UITextField संपादित करते समय आप नियंत्रक में जो पंक्ति संपादित कर रहा है पता कर सकते हैं (सेल के टैग के माध्यम से)

10
  1. अपने डेटा मॉडल में एक म्यूटेबल सरणी में अपने सभी टेक्स्ट फ़ील्ड के मानों को स्टोर करें।

  2. tableView:willDisplayCell:forRowAtIndexPath: में इंडेक्स पथ के आधार पर आपके सरणी के मान का उपयोग करके अपने टेक्स्ट फ़ील्ड के मान को सेट करें।

  3. जब कोई टेक्स्ट फ़ील्ड संपादन समाप्त होता है, तो मूल्य को तुरंत सरणी में संग्रहीत करें।वहां पहले से ही इस के लिए एक प्रोटोकॉल (ताकि कोई अपने खुद के बारे में की जरूरत) है, लेकिन यह सामान्य से कुछ अधिक जटिल काम है क्योंकि आप indexPath सौंप दिया नहीं कर रहे हैं और अपने पाठ क्षेत्र के साथ जुड़े एक खोजने की जरूरत है:

    - (void) textFieldDidEndEditing:(UITextField *)textField { 
        CGRect location = [self convertRect:textField.frame toView:self.tableView]; 
        NSIndexPath *indexPath = [[self.tableView indexPathsForRowsInRect:location] objectAtIndex:0]; 
    
        // Save the contents of the text field into your array: 
        [yourArray replaceObjectAtIndex:indexPath.row withObject:textField.text]; 
    } 
    
+1

बहुत बढ़िया !!! इंडेक्सपैथ स्टोर करने के लिए एक चर के साथ एक कस्टम टेक्स्टफील्ड बनाने से यह दृष्टिकोण बहुत बेहतर है। जब आप कोशिकाओं को चारों ओर ले जाते हैं तो इसके लिए कम प्रयास की आवश्यकता होती है – user1046037

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