2009-12-03 11 views
8

जब मैं चुना गया है तो मैं सेल के टेक्स्ट लेबल और विवरण टेक्स्ट टेक्स्ट को बदलना चाहता हूं। मैं निम्नलिखित की कोशिश की है, लेकिन कोई परिवर्तन नहीं होता:UITableViewCell का चयन करते समय आप टेक्स्ट लेबल को कैसे बदलते हैं?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    MyAppDelegate *appDelegate = (MyPhoneAppDelegate*)[[UIApplication sharedApplication] delegate]; 

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    cell.detailTextLabel.text = @"xxxxx"; 
    cell.textLabel.text =  @"zzzzz"; 
    [tableView reloadData]; 
} 

उत्तर

-1

आप पूरी तालिका फिर से लोड करने के बजाय केवल चयनित सेल को ताज़ा करने की कोशिश की?

[cell setNeedsDisplay];

[tableView reloadData];

के बजाय यह बेहतर प्रदर्शन करना होगा और मैं नहीं कर रहा हूँ, लेकिन मुझे लगता है कि चयन करता है, तो आप पूरी तालिका ताज़ा खो दिया है (यही कारण है कि हो सकता है आपको अंत में कोई बदलाव नहीं दिख रहा है) ....

+0

कॉल करने के लिए बदलने पर विचार कर रहे हैं instantiating है यदि आप कस्टम सेल व्यू का उपयोग कर रहे हैं तो क्या होगा? – meridimus

+0

एक कस्टम सेल व्यू सामग्री के लिए एक दृश्य सेट है UITableViewCell के दृश्य, तो यह वही है, setNeedsDisplay सामग्री दृश्य को फिर से चलाएगा। – yonel

2

आपको सेल का चयन करते समय तालिका को फिर से लोड करने की कोशिश नहीं करनी चाहिए। आप लेबल के ऊपर परिवर्तन करने के बाद इसके बजाय,

[सेल setNeedsLayout]

प्रयास करें।

इसके अलावा, क्या आप इस विधि में ऐप प्रतिनिधि के संदर्भ में एक कारण बना रहे हैं?

+0

यह मेरे लिए पूरी तरह से काम किया। धन्यवाद! – Nick

10

मैं मानता हूं, तालिका दृश्य को फिर से लोड करना वास्तव में tableView:cellForRowAtIndexPath: का उपयोग करके सभी कोशिकाओं को डंप और पुनः लोड/प्रदर्शित करेगा और मूल डेटा का उपयोग करें, न कि आपके tableView:didSelectRowAtIndexPath: विधि में अद्यतन @ "xxxxx" और @ "yyyyy"।

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath]; 
    cell.textLabel.text = @"it was tapped"; 
} 
0

एक नया आईपैड परियोजना (स्प्लिट देखें) बनाएँ और अब वर्गों-> फ़ाइलें के माध्यम से जाना:

एक छोटे से परीक्षण परियोजना में मैं चयन पर साथ लेबल बदलने में सक्षम था। वहां सबसे आसान तरीका दिया गया है। एक्सकोड के जेनरेटेड कोड।

नमूना कोड लाइन्स: -

cell.textLabel.text = [NSString stringWithFormat:@"Row %d", indexPath.row]; 

आप सेल आपके द्वारा चयनित (indexPath द्वारा वर्णित) फिर से लोड करने में cellForRowAtIndexPath ||&& didSelectRowAtIndexPath ..

2

कोशिश उन्हें इस्तेमाल कर सकते हैं:

[yourTableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone]; 
0

सुनिश्चित नहीं हैं कि आप प्रतिनिधि के साथ करने की कोशिश कर रहे हैं, लेकिन आपको पहले से ही चालू किए गए तालिका को कॉल करने का प्रयास करना चाहिए; यानी फोन

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath: indexPath]; 

शायद मैं स्पष्ट नहीं कर रहा हूँ जो मैं कह रहा हूँ कि आप एक नया खाली तालिका दृश्य

UITableViewCell *cell = [**tableView** cellForRowAtIndexPath: indexPath]; //cell has nothing it is new. 

वर्ष

UITableViewCell *cell = [**self.tableView** cellForRowAtIndexPath: indexPath]; //now you have one that has a textField already in it 
+0

क्या आप देखते हैं कि मैं क्या कह रहा हूं? आप एक नया उदाहरण बना रहे हैं जो पुराना नहीं है। –

+0

यदि आप कोई नया बनाते हैं तो आपको तालिका दृश्य में इसे देखने के लिए डेटा पुनः लोड करना होगा। यदि आप पुराने का उपयोग करते हैं तो दृश्य परिवर्तनों को प्रतिबिंबित करेगा। –